From 56079b4b9b7aa232634228f8d0f0f5ad8e50e179 Mon Sep 17 00:00:00 2001 From: becio Date: Thu, 21 Jul 2016 16:45:18 +0200 Subject: [PATCH 001/186] GeometryFeatureProvider.ConnectionId should be virtual for testing purposes --- SharpMap/Data/Providers/GeometryFeatureProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharpMap/Data/Providers/GeometryFeatureProvider.cs b/SharpMap/Data/Providers/GeometryFeatureProvider.cs index a41813b5..ee6d6a27 100644 --- a/SharpMap/Data/Providers/GeometryFeatureProvider.cs +++ b/SharpMap/Data/Providers/GeometryFeatureProvider.cs @@ -322,7 +322,7 @@ public Envelope GetExtents() /// The ConnectionID is meant for Connection Pooling which doesn't apply to this datasource. Instead /// String.Empty is returned. /// - public string ConnectionID + public virtual string ConnectionID { get { return String.Empty; } } From 9ee2fde44e4dc5b7df49fe0970ac78d916b86fde Mon Sep 17 00:00:00 2001 From: Aleksandar Toplek Date: Thu, 1 Dec 2016 15:55:47 +0100 Subject: [PATCH 002/186] Fixed WPF example layer changed handler --- SharpMap.UI.WPF/SharpMapHost.cs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/SharpMap.UI.WPF/SharpMapHost.cs b/SharpMap.UI.WPF/SharpMapHost.cs index 5aef4080..ff956d29 100644 --- a/SharpMap.UI.WPF/SharpMapHost.cs +++ b/SharpMap.UI.WPF/SharpMapHost.cs @@ -403,29 +403,33 @@ private void OnMapLayerChanged(object sender, NotifyCollectionChangedEventArgs e switch (e.Action) { case NotifyCollectionChangedAction.Add: - { - var layers = sender as ObservableCollection; - if (layers != null) { - foreach (var layer in layers.Where(layer => !_mapBox.Map.Layers.Contains(layer))) + var layers = e.NewItems; + if (layers != null) { - _mapBox.Map.Layers.Add(layer); + foreach (var layer in layers) + { + var castedLayer = layer as ILayer; + if (castedLayer != null && MapBox.Map.Layers.All(l => l.LayerName != castedLayer.LayerName)) + MapBox.Map.Layers.Add(castedLayer); + } } } - } break; case NotifyCollectionChangedAction.Remove: - { - var layers = sender as ObservableCollection; - if (layers != null) { - foreach (var layer in layers.Where(layer => _mapBox.Map.Layers.Contains(layer))) + var layers = e.OldItems; + if (layers != null) { - _mapBox.Map.Layers.Remove(layer); + foreach (var layer in layers) + { + var castedLayer = layer as ILayer; + if (castedLayer != null && MapBox.Map.Layers.Any(l => l.LayerName == castedLayer.LayerName)) + MapBox.Map.Layers.Remove(castedLayer); + } } } - } break; case NotifyCollectionChangedAction.Reset: From 1928671caf63cae82555cd1eaeeb0b1fe3ee72c1 Mon Sep 17 00:00:00 2001 From: Aleksandar Toplek Date: Wed, 7 Dec 2016 02:55:39 +0100 Subject: [PATCH 003/186] Update MapBox.cs --- SharpMap.UI/Forms/MapBox.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index f5f4f3c4..5dee8884 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -2256,10 +2256,17 @@ protected override void OnMouseUp(MouseEventArgs e) { if (_rectangle.Width > 0 && _rectangle.Height > 0) { + var zoomWindowStartPoint = _dragStartPoint; + var zoomWindowEndPoint = new PointF(e.X, e.Y); + Coordinate lowerLeft; Coordinate upperRight; - GetBounds(_map.ImageToWorld(_dragStartPoint), _map.ImageToWorld(_dragEndPoint), - out lowerLeft, out upperRight); + GetBounds( + _map.ImageToWorld(zoomWindowStartPoint), + _map.ImageToWorld(zoomWindowEndPoint), + out lowerLeft, + out upperRight); + _dragEndPoint.X = 0; _dragEndPoint.Y = 0; @@ -2551,4 +2558,4 @@ static public bool PutEnhMetafileOnClipboard(IntPtr hWnd, Metafile mf) } } #endif -} \ No newline at end of file +} From c3f3217b1bf17811188a7b62f8e02ab382908a49 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Mon, 19 Dec 2016 08:30:25 +0100 Subject: [PATCH 004/186] VB.Net theming example --- .../CustomThemeExample.vb | 152 ++++++ .../ExampleCodeSnipplets.VB.vbproj | 4 + .../Data/Providers/Venus2/ZPZProvider.cs | 161 ++++++ .../Data/Providers/Venus2/xKKProvider.cs | 252 +++++++++ .../Data/Providers/Venus2/xxSProvider.cs | 238 +++++++++ .../Data/Providers/Venus3/V3DemandGeometry.cs | 23 + .../Data/Providers/Venus3/V3DemandProvider.cs | 422 +++++++++++++++ .../Venus3/V3DemandProviderAccess.cs | 193 +++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../SharpMap.Data.Providers.IVV.csproj | 93 ++++ ...pMap.Data.Providers.IVV.csproj.DotSettings | 2 + .../Test/V3DemandProviderTests.cs | 124 +++++ SharpMap.Data.Providers.IVV/Test/xKKTests.cs | 95 ++++ .../Utilities/Class1.cs | 19 + SharpMap.Data.Providers.IVV/packages.config | 6 + .../OracleSpatial.cs | 496 ++++++++++++++++++ SharpMap.Extensions.nuspec | 2 +- .../Data/Providers/NtsProvider.cs | 4 + .../SharpMap.Extensions.csproj | 14 +- SharpMap.Extensions/packages.config | 2 +- SharpMap.UI/Forms/Tools/FeatureEditorTool.cs | 18 + SharpMap.UI/SharpMap.UI.csproj | 1 + SharpMap.sln | 26 + SharpMap/Data/FeatureDataSet.cs | 14 +- SharpMap/Data/Providers/BaseProvider.cs | 233 ++++++++ SharpMap/Drawing/Matrix.cs | 118 +++++ SharpMap/Drawing/Point.cs | 31 ++ SharpMap/Geometries/GeoAPIEx.cs | 4 +- SharpMap/Layers/Layer.cs | 29 +- .../Symbolizer/BasicLineSymbolizer.cs | 4 +- .../Symbolizer/BasicPolygonSymbolizer.cs | 2 +- .../Symbolizer/CachedLineSymbolizer.cs | 2 +- SharpMap/Rendering/Thematics/FontSizeTheme.cs | 2 +- SharpMap/Rendering/VectorRenderer.cs | 12 +- SharpMap/SharpMap.csproj | 2 + SharpMap/Web/WebUtilities.cs | 4 +- UnitTests/Data/Providers/NtsProviderTests.cs | 7 +- UnitTests/Properties/Settings.Designer.cs | 5 +- UnitTests/Properties/Settings.settings | 16 +- UnitTests/UnitTests.csproj | 14 +- UnitTests/app.config | 10 +- UnitTests/packages.config | 2 +- 42 files changed, 2848 insertions(+), 46 deletions(-) create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus2/ZPZProvider.cs create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xKKProvider.cs create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xxSProvider.cs create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandGeometry.cs create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProvider.cs create mode 100644 SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProviderAccess.cs create mode 100644 SharpMap.Data.Providers.IVV/Properties/AssemblyInfo.cs create mode 100644 SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj create mode 100644 SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings create mode 100644 SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs create mode 100644 SharpMap.Data.Providers.IVV/Test/xKKTests.cs create mode 100644 SharpMap.Data.Providers.IVV/Utilities/Class1.cs create mode 100644 SharpMap.Data.Providers.IVV/packages.config create mode 100644 SharpMap.UI/Forms/Tools/FeatureEditorTool.cs create mode 100644 SharpMap/Drawing/Matrix.cs create mode 100644 SharpMap/Drawing/Point.cs diff --git a/Examples/ExampleCodeSnipplets.VB/CustomThemeExample.vb b/Examples/ExampleCodeSnipplets.VB/CustomThemeExample.vb index 06f0b75d..f48d69ac 100644 --- a/Examples/ExampleCodeSnipplets.VB/CustomThemeExample.vb +++ b/Examples/ExampleCodeSnipplets.VB/CustomThemeExample.vb @@ -48,3 +48,155 @@ End Function End Class + + +public Class UniqueValuesThemeTest + + Private delObjektLabelBez As SharpMap.Layers.LabelLayer.GetLabelMethod + Private delObjektLabelPos As SharpMap.Layers.LabelLayer.GetLocationMethod + Private delObjektLabelStyle As SharpMap.Rendering.Thematics.CustomTheme.GetStyleMethod + Private delObjektStyle As SharpMap.Rendering.Thematics.CustomTheme.GetStyleMethod + ' + Private _map As SharpMap.Map + + public class OtherClassItem + public Property Name () As String + Public Property Datasource() As string + Public Property Table() As string + Public Property Field() As string + End Class + + public class OtherClass + Inherits System.Collections.Generic.List(Of OtherClassItem) + public Property Name () As String + End Class + + Private _polygonTheme As SharpMap.Rendering.Thematics.UniqueValuesTheme(Of Int32) = CreatePolygonTheme() + + Private Shared Function CreatePolygonTheme() As SharpMap.Rendering.Thematics.Uniquevaluestheme(of Int32) + + Dim styleMap As new Dictionary(Of int32, SharpMap.Styles.IStyle) + Dim s As SharpMap.Styles.VectorStyle + '1 + s = New SharpMap.Styles.VectorStyle() + s.Line = new Drawing.Pen(Drawing.Color.Black, 1) + s.Fill = new Drawing.SolidBrush(Drawing.Color.Green) + s.EnableOutline = True + styleMap.Add(1, s) + '2 + s = New SharpMap.Styles. VectorStyle() + s.Outline=new Drawing.Pen(Drawing.Color.Black, 1) + s.Fill = New Drawing.SolidBrush(Drawing.Color.Blue) + s.EnableOutline = True + styleMap.Add(2, s) + '3 + s = New SharpMap.Styles.VectorStyle() + s.Outline =new Drawing.Pen(Drawing.Color.Black, 1) + s.Fill = New Drawing.SolidBrush(Drawing.Color.Red) + s.EnableOutline = True + styleMap.Add(2, s) + + + Return new SharpMap.Rendering.Thematics.UniqueValuesTheme(Of Integer)("FilterColumn", styleMap, SharpMap.Styles.VectorStyle.CreateRandomPolygonalStyle()) + End Function + + Public Sub CreateLayers(ByVal config as OtherClass) + ' + delObjektLabelBez = New SharpMap.Layers.LabelLayer.GetLabelMethod(AddressOf LabelObjektBezeichnung) + delObjektLabelPos = New SharpMap.Layers.LabelLayer.GetLocationMethod(AddressOf LabelBezeichnungPos) + delObjektStyle = New SharpMap.Rendering.Thematics.CustomTheme.GetStyleMethod(AddressOf GetObjektStyle) + delObjektLabelStyle = New SharpMap.Rendering.Thematics.CustomTheme.GetStyleMethod(AddressOf GetObjektLabelStyle) + ' + For each itm as OtherClassItem in config + Select Case itm.Name + Case "Name1" + Dim smp as New SharpMap.Data.Providers.PostGIS(itm.Datasource, itm.Table, itm.Field) + Dim vLay as New SharpMap.Layers.VectorLayer(itm.Name, smp) + 'Dim layTheme = New SharpMap.Rendering.Thematics.CustomTheme(delObjektStyle) + vLay.Theme = Me._polygonTheme 'layTheme + ' + Dim labLay As New SharpMap.Layers.LabelLayer("Lable: " & itm.Name) + Dim labTheme as New SharpMap.Rendering.Thematics.CustomTheme(delObjektLabelStyle) + labLay.DataSource = vLay.DataSource + labLay.Theme = labTheme + labLay.LabelStringDelegate = delObjektLabelBez + labLay.LabelPositionDelegate = delObjektLabelPos + ' + _map.Layers.Add(vLay) + _Map.Layers.Add(labLay) + ' + Case "Name2" + Dim smp as New SharpMap.Data.Providers.PostGIS(itm.Datasource, itm.Table, itm.Field) + Dim vLay as New SharpMap.Layers.VectorLayer(itm.Name, smp) + ' + 'other code + ' + Dim labLay As New SharpMap.Layers.LabelLayer("Lable: " & itm.Name) + Dim labTheme as New SharpMap.Rendering.Thematics.CustomTheme(delObjektLabelStyle) + labLay.DataSource = vLay.DataSource + labLay.Theme = labTheme + labLay.LabelStringDelegate = delObjektLabelBez + labLay.LabelPositionDelegate = delObjektLabelPos + ' + _map.Layers.Add(vLay) + _map.Layers.Add(labLay) + ' + End Select + ' + Next + ' + 'Other Code ..... + ' + End Sub + + Private Shared function LabelObjektBezeichnung(fdr As SharpMap.Data.FeatureDataRow) As String + return "The quick brown fox ..." + End function + + Private Shared Function LabelBezeichnungPos(fdr As SharpMap.Data.FeatureDataRow) As GeoAPI.Geometries.Coordinate + return new GeoAPI.Geometries.Coordinate(0, 0) + End Function + + Private shared function GetObjektLabelStyle(fdr As SharpMap.Data.FeatureDataRow) As SharpMap.Styles.LabelStyle + + End function + Private shared Function GetObjektStyle(fdr As SharpMap.Data.FeatureDataRow) As SharpMap.Styles.VectorStyle + ' + Dim style As New SharpMap.Styles.VectorStyle + Dim c as Drawing.Color + Dim p as Drawing.Pen + Dim b as Drawing.Brush + ' + Select Case fdr.Table.TableName + Case "Name1" '-- Polygon + Select Case fdr("FilterColumn") + Case 1 + c = Drawing.Color.Green + p = New Drawing.Pen(Drawing.Color.Black, 1) + b = New Drawing.SolidBrush(c) + Case 2 + c = Drawing.Color.Blue + p = New Drawing.Pen(Drawing.Color.Black, 1) + b = New Drawing.SolidBrush(c) + Case Else + c = Drawing.Color.Red + p = New Drawing.Pen(Drawing.Color.Black, 1) + b = New Drawing.SolidBrush(c) + End Select + ' + style.Fill = b + style.Outline = p + ' + Case "Name2"' -- Lines + ' + ' this Code will not Run + ' + Case Else + End Select + ' + Return style + ' + End Function + ' + +End Class \ No newline at end of file diff --git a/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj b/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj index 8af336cd..577db7b2 100644 --- a/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj +++ b/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj @@ -115,6 +115,10 @@ + + {a4140c12-53f5-438c-8d24-9e48c504fecf} + SharpMap.Extensions + {c83777fc-aabb-47d9-911f-d76255d4d541} SharpMap diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/ZPZProvider.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/ZPZProvider.cs new file mode 100644 index 00000000..39af47cd --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/ZPZProvider.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.IO; +using System.Net.Configuration; +using GeoAPI.Geometries; + +namespace SharpMap.Data.Providers +{ + public class ZPZProvider : BaseProvider + { + private xKKProvider _provider; + private ZPZ[] _zpz; + + internal ZPZProvider(ZPZ[] zpz, xKKProvider provider) + { + _zpz = zpz; + _provider = provider; + } + + public static ZPZProvider Load(string filename, xKKProvider provider) + { + + using (var s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Load(s, provider); + } + } + + public static ZPZProvider Load(Stream stream, xKKProvider provider) + { + var reader = new BinaryReader(stream); + var version = Utilities.Utilities.Win1252.Value.GetString(reader.ReadBytes(6)); + var numRegions = reader.ReadInt16(); + var zpzs = new ZPZ[numRegions]; + + for (var i = 0; i < numRegions; i++) + { + zpzs[i] = new ZPZ(); + zpzs[i].Zellnr = i + 1; + zpzs[i].Read(reader); + } + + return new ZPZProvider(zpzs, provider); + } + + public override Collection GetGeometriesInView(Envelope bbox) + { + var res = new Collection(); + for (var i = 0; i < _zpz.Length; i++) + { + var box = _zpz[i].Envelope; + if (box == null || bbox.Intersects(box)) + { + var tmp = GetGeometryByID((uint) i + 1); + if (tmp != null) res.Add(tmp); + } + } + return res; + } + + public override void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) + { + ExecuteIntersectionQuery(Factory.ToGeometry(box), ds); + } + + public override int GetFeatureCount() + { + return _zpz.Length; + } + + public override Envelope GetExtents() + { + return _provider.GetExtents(); + } + + public override FeatureDataRow GetFeature(uint rowId) + { + return null; + } + + public override Collection GetObjectIDsInView(Envelope bbox) + { + var res = new Collection(); + for (var i = 0; i < _zpz.Length; i++) + { + var box = _zpz[i].Envelope; + if (box == null || bbox.Intersects(box)) + { + var tmp = GetGeometryByID((uint)i + 1); + if (tmp != null) res.Add((uint)i + 1); + } + } + return res; + } + + public override IGeometry GetGeometryByID(uint oid) + { + var zpz = _zpz[oid - 1]; + Debug.Assert(zpz.Zellnr == (int)oid); + + if (zpz.PolygonPunkte == null) return null; + + var seq = Factory.CoordinateSequenceFactory.Create(zpz.PolygonPunkte.Length, Ordinates.XY); + for (var i = 0; i < zpz.PolygonPunkte.Length; i++) + { + var coord = _provider[zpz.PolygonPunkte[i]].Coordinate; + seq.SetOrdinate(i, Ordinate.X, coord.X); + seq.SetOrdinate(i, Ordinate.Y, coord.Y); + } + Debug.Assert(NetTopologySuite.Geometries.CoordinateSequences.IsRing(seq), "Ring is not closed!"); + var ring = Factory.CreateLinearRing(seq); + var res = Factory.CreatePolygon(ring); + if (zpz.Envelope == null) zpz.Envelope = res.EnvelopeInternal; + return res; + } + + protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + { + //throw new System.NotImplementedException(); + } + } + + internal class ZPZ + { + public int Zellnr; + public int[] PolygonPunkte; + public Envelope Envelope { get; set; } + + public void Read(BinaryReader reader) + { + int numPoints = reader.ReadInt32(); + if (numPoints > 0) + { + PolygonPunkte = new int[numPoints]; + for (var i = 0; i < numPoints; i++) + { + var pktId = reader.ReadInt32(); + /* + var pktIdBytes = BitConverter.GetBytes(pktId); + Array.Reverse(pktIdBytes); + pktId = BitConverter.ToInt32(pktIdBytes, 0); + */ + PolygonPunkte[i] = pktId; + } + } + } + + public void Write(BinaryWriter writer) + { + if (PolygonPunkte == null) + writer.Write((int) 0); + else + { + writer.Write(PolygonPunkte.Length); + for (var i = 0; i < PolygonPunkte.Length; i++) + writer.Write(PolygonPunkte[i]); + } + } + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xKKProvider.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xKKProvider.cs new file mode 100644 index 00000000..a04fa5a8 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xKKProvider.cs @@ -0,0 +1,252 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Data; +using System.Diagnostics; +using System.IO; +using GeoAPI.Geometries; + +namespace SharpMap.Data.Providers +{ + internal struct xKK + { + public int ID; + public float X; + public float Y; + public short Ken; + + public Coordinate Coordinate + { + get { return new Coordinate(X, Y); } + } + + public bool Valid + { + get + { + if (Ken > 0) + return X != 0f && Y != 0f; + return false; + } + } + + /// + /// Method to read a xKK item using the provided reader + /// + /// + /// + public static xKK Read(BinaryReader reader) + { + var res = new xKK + { + Ken = reader.ReadInt16(), + ID = reader.ReadInt32(), + X = reader.ReadSingle(), + Y = reader.ReadSingle() + }; + + return res; + } + + public void Write(BinaryWriter writer) + { + writer.Write(Ken); + writer.Write(ID); + writer.Write(X); + writer.Write(Y); + } + } + + /// + /// + /// + public class xKKProvider : BaseProvider + { + private xKK[] _points; + private int _numUsed; + private Envelope _extent; + + private xKKProvider(xKK[] points, int? numValid = null, Envelope extent= null) + { + _points = points; + _extent = extent; + if (numValid.HasValue) + _numUsed = numValid.Value; + else + EvaluatePoints(points); + } + + private void EvaluatePoints(xKK[] points) + { + _numUsed = 0; + _extent = new Envelope(); + for (var i = 0; i < points.Length; i++) + { + if (points[i].Valid) + { + _numUsed++; + _extent.ExpandToInclude(points[i].Coordinate); + } + } + } + + public static xKKProvider Load(string filename) + { + Debug.Assert(!string.IsNullOrEmpty(filename)); + Debug.Assert(File.Exists(filename)); + + using (var s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + var res = Load(s); + res.ConnectionID = filename; + return res; + } + } + + public static xKKProvider Load(Stream stream) + { + Debug.Assert(stream != null); + Debug.Assert(stream.CanRead); + Debug.Assert(stream.Position == 0); + + var reader = new BinaryReader(stream); + var version = Utilities.Utilities.ReadVersion(reader); + if (version != " 2.2o ") + throw new Exception("Invalid version"); + var numPoints = reader.ReadInt32(); + + var points = new xKK[numPoints]; + var numValid = 0; + var extent = new Envelope(); + for (var i = 0; i < numPoints; i ++) + { + var item = xKK.Read(reader); + if (item.Valid) + { + points[i] = item; + numValid++; + extent.ExpandToInclude(item.Coordinate); + } + } + + return new xKKProvider(points, numValid, extent); + } + + private FeatureDataTable _baseTable; + protected FeatureDataTable GetBaseTable() + { + if (_baseTable != null) + { + _baseTable = new FeatureDataTable(); + var fid = _baseTable.Columns.Add("FID", typeof (int)); + fid.AllowDBNull = false; + var ken = _baseTable.Columns.Add("KEN", typeof (short)); + ken.AllowDBNull = false; + _baseTable.Constraints.Add("pk_fid", fid, true); + } + return _baseTable; + + } + + public override Collection GetGeometriesInView(Envelope bbox) + { + var res = new Collection(); + for (var i = 0; i < _points.Length; i++) + { + if (!_points[i].Valid) continue; + + var location = _points[i].Coordinate; + if (bbox.Intersects(location)) + res.Add(Factory.CreatePoint(location)); + } + return res; + } + + public override void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) + { + ExecuteIntersectionQuery(Factory.ToGeometry(box), ds); + } + + public override int GetFeatureCount() + { + return _numUsed; + } + + public override Envelope GetExtents() + { + return _extent; + } + + public override FeatureDataRow GetFeature(uint rowId) + { + if (rowId >= _points.Length) + throw new ArgumentOutOfRangeException("rowId"); + + if (!_points[rowId].Valid) + throw new ArgumentException("rowId"); + + var tbl = GetBaseTable(); + var res = tbl.NewRow(); + res[0] = (int) rowId; + res[1] = _points[rowId].Ken; + res.Geometry = Factory.CreatePoint(_points[rowId].Coordinate); + + return res; + } + + public override Collection GetObjectIDsInView(Envelope bbox) + { + var res = new Collection(); + foreach (var point in _points) + { + if (point.Valid && + _extent.Intersects(point.Coordinate)) + res.Add((uint)point.ID); + } + return res; + } + + public override IGeometry GetGeometryByID(uint rowId) + { + if (rowId >= _points.Length) + throw new ArgumentOutOfRangeException("rowId"); + + if (!_points[rowId].Valid) + throw new ArgumentException("rowId"); + + return Factory.CreatePoint(_points[rowId].Coordinate); + } + + protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + { + var pgeom = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(geom); + var res = (FeatureDataTable)GetBaseTable().Copy(); + res.BeginLoadData(); + + foreach (var point in _points) + { + if (point.Valid) + { + var tmpGeom = Factory.CreatePoint(point.Coordinate); + if (pgeom.Intersects(tmpGeom)) + { + var fdr = (FeatureDataRow) + res.LoadDataRow(new[] {(object) point.ID, point.Ken}, + LoadOption.OverwriteChanges); + fdr.Geometry = tmpGeom; + } + } + } + + res.EndLoadData(); + ds.Tables.Add(res); + } + + /// + /// Method to get the of a geometry + /// + /// The (1-based) index + /// The xKK object + internal xKK this[int index] { get { return _points[index - 1]; } } + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xxSProvider.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xxSProvider.cs new file mode 100644 index 00000000..88c4e4fc --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus2/xxSProvider.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Reflection; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using GeoAPI.Geometries; + +namespace SharpMap.Data.Providers +{ + internal class xxSProvider : BaseProvider where T : xxS + { + private readonly xKKProvider _provider; + private int _numValid; + private T[] _xxS; + + protected xxSProvider(xKKProvider p, T[] xxS, int numUsed) + { + _provider = p; + _xxS = xxS; + _numValid = numUsed; + } + + public override Envelope GetExtents() + { + return _provider.GetExtents(); + } + + private FeatureDataTable _basetable; + protected FeatureDataTable GetBasetable() + { + if (_basetable == null) + { + _basetable = GetBasetableInternal(); + } + return _basetable; + } + + protected virtual FeatureDataTable GetBasetableInternal() + { + var res = new FeatureDataTable(); + var fid = res.Columns.Add("FID", typeof (int)); + fid.AllowDBNull = false; + var vk = res.Columns.Add("VK", typeof(int)); + vk.AllowDBNull = false; + var nk = res.Columns.Add("NK", typeof(int)); + nk.AllowDBNull = false; + var art = res.Columns.Add("ART", typeof(int)); + art.AllowDBNull = false; + + foreach (var fieldInfo in typeof(T).GetFields(BindingFlags.Instance | BindingFlags.Public + | BindingFlags.DeclaredOnly )) + { + var col = res.Columns.Add(fieldInfo.Name, fieldInfo.FieldType); + col.AllowDBNull = false; + } + res.Constraints.Add("pk_FID", fid, true); + return res; + } + + public override FeatureDataRow GetFeature(uint rowId) + { + var f = GetBasetable().NewRow(); + f.Geometry = GetGeometryByID(rowId); + f.ItemArray = GetItems(rowId); + + return f; + } + + protected object[] GetItems(uint rowId) + { + var res = new List(); + res.Add(rowId--); + _xxS[rowId].AddItems(res); + return res.ToArray(); + } + + public override IGeometry GetGeometryByID(uint oid) + { + var xKK1 = _provider[_xxS[--oid].VK]; + var xKK2 = _provider[_xxS[oid].NK]; + + return Factory.CreateLineString(new [] {xKK1.Coordinate, xKK2.Coordinate}); + } + + protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + { + var p = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(geom); + var fdt = (FeatureDataTable)GetBasetable().Copy(); + fdt.BeginLoadData(); + for (var i = 0; i < _xxS.Length; i++) + { + if (_xxS[i] != null && _xxS[i].Valid) + { + var id = (uint) i + 1; + var tmpGeom =GetGeometryByID(id); + if (p.Intersects(tmpGeom)) + { + var fdr = (FeatureDataRow)fdt.LoadDataRow(GetItems(id), true); + fdr.Geometry = tmpGeom; + } + } + } + fdt.EndLoadData(); + ds.Tables.Add(fdt); + } + + public override Collection GetObjectIDsInView(Envelope bbox) + { + var res = new Collection(); + for (uint i = 1; i <= _xxS.Length; i++) + { + if (bbox.Intersects(GetGeometryByID(i).EnvelopeInternal)) + res.Add(i); + } + return res; + } + + public override void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) + { + ExecuteIntersectionQuery(Factory.ToGeometry(box), ds); + } + + public override int GetFeatureCount() + { + return _numValid; + } + + public override Collection GetGeometriesInView(Envelope bbox) + { + var res = new Collection(); + for (uint i = 1; i <= _xxS.Length; i++) + { + var geom = GetGeometryByID(i); + if (bbox.Intersects(geom.EnvelopeInternal)) + res.Add(geom); + } + return res; + } + + internal T this[int index] { get { return _xxS[index]; } } + + public static xxSProvider Load(string filename, Func readerFn, xKKProvider p) + { + using (var s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Load(s, readerFn, p); + } + } + + public static xxSProvider Load(Stream stream, Func readerFn, xKKProvider p) + { + var reader = new BinaryReader(stream); + var version = Utilities.Utilities.Win1252.Value.GetString(reader.ReadBytes(6)); + var numLinks = reader.ReadInt32(); + var numValid = 0; + var xxSs = new T[numLinks]; + + for (var i = 0; i < numLinks; i++) + { + var xxSItem = readerFn(reader); + if (xxSItem.Valid) + { + numValid++; + xxSs[i] = xxSItem; + } + + } + return new xxSProvider(p, xxSs, numValid); + } + } + + internal abstract class xxS + { + public int VK; + public int NK; + public short Art; + + internal bool Valid { get { return /*Art > 0 && */ VK > 0 && NK > 0; } } + + public virtual void Read(BinaryReader reader) + { + VK = reader.ReadInt32(); + NK = reader.ReadInt32(); + Art = reader.ReadInt16(); + } + + public virtual void Write(BinaryWriter writer) + { + writer.Write(VK); + writer.Write(NK); + writer.Write(Art); + } + + public virtual void AddItems(IList list) + { + list.Add(VK); + list.Add(NK); + list.Add(Art); + } + } + + internal class ZGS : xxS + { + public short ZNrL; + public short ZNrR; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + ZNrL = reader.ReadInt16(); + ZNrR = reader.ReadInt16(); + reader.ReadBytes(6); + } + + public override void Write(BinaryWriter writer) + { + base.Write(writer); + writer.Write(ZNrL); + writer.Write(ZNrR); + writer.Write(new byte[6]); + } + + public override void AddItems(IList list) + { + base.AddItems(list); + list.Add(ZNrL); + list.Add(ZNrR); + } + + internal static ZGS Create(BinaryReader reader) + { + var res = new ZGS(); + res.Read(reader); + return res; + } + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandGeometry.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandGeometry.cs new file mode 100644 index 00000000..bdb58c54 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandGeometry.cs @@ -0,0 +1,23 @@ +/* + * Copyright © Ingenieurgruppe IVV GmbH & Co. KG - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * + * Written by Felix Obermaier, 11.2016 + * + * This file is part of SharpMap.Data.Providers.IVV. + * + * Revision History: + * Date | Change | by + * -----------+--------------------------------------------+---------------------- + * 2016.11.14 | Initial version | Felix Obermaier + * + */ +namespace SharpMap.Data.Providers.Venus3 +{ + public enum V3DemandGeometry + { + Centroid, + Area + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProvider.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProvider.cs new file mode 100644 index 00000000..cc272daa --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProvider.cs @@ -0,0 +1,422 @@ +/* + * Copyright © Ingenieurgruppe IVV GmbH & Co. KG - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * + * Written by Felix Obermaier, 11.2016 + * + * This file is part of SharpMap.Data.Providers.IVV. + * + * Revision History: + * Date | Change | by + * -----------+--------------------------------------------+---------------------- + * 2016.11.14 | Initial version | Felix Obermaier + * + */ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Data; +using System.Data.Common; +using System.Diagnostics; +using System.Text; +using GeoAPI.Geometries; +using NetTopologySuite.IO; + +namespace SharpMap.Data.Providers.Venus3 +{ + /// + /// Abstract base class for a V3Demand database provider + /// + public abstract class V3DemandProvider : BaseProvider + { + protected const string RegionId = "REGIONID"; + + protected string _selectGetFeatureCount; + protected string _selectGetExtents; + protected string _selectDataDefinition; + + /// + /// + /// + protected string _selectFeatures; + protected string _selectFeature; + protected string _selectDataSubQuery; + + /// + /// sql command to get + /// + protected string _selectObjectIds; + protected string _selectGeometries; + protected string _selectGeometry; + + protected readonly Dictionary _attributes = new Dictionary(); + protected readonly List _selectedAttributes = new List(); + + private Envelope _extents; + private FeatureDataTable _baseTable ; + + protected V3DemandProvider(int srid, string connectionId) + : base(srid) + { + ConnectionID = connectionId; + } + + public void Clear() + { + _selectedAttributes.Clear(); + _selectDataSubQuery = null; + _baseTable = null; + } + + public void Include(string dataLabel) + { + if (_selectedAttributes.Contains(dataLabel)) + return; + if (!_attributes.ContainsKey(dataLabel)) + return; + _selectedAttributes.Add(dataLabel); + _selectDataSubQuery = null; + _baseTable = null; + } + + public void Exclude(string dataLabel) + { + if (_selectedAttributes.Contains(dataLabel)) + return; + _selectedAttributes.Add(dataLabel); + _selectDataSubQuery = null; + _baseTable = null; + } + + protected void FillDataDictionary() + { + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectDataDefinition, cn)) + { + var rdr = cmd.ExecuteReader(); + Debug.Assert(rdr.HasRows); + + while (rdr.Read()) + { + if (!_attributes.ContainsKey(Convert.ToString(rdr[1]))) + _attributes.Add(Convert.ToString(rdr[1]), Convert.ToInt32(rdr[0])); +#if DEBUG + else + { + Trace.WriteLine(string.Format("First : {0}/{1} ", Convert.ToString(rdr[1]), _attributes[Convert.ToString(rdr[1])])); + Trace.WriteLine(string.Format("Duplicate: {0}/{1} ", Convert.ToString(rdr[1]), Convert.ToInt32(rdr[0]))); + } +#endif + } + } + } + + /// + /// Method to create a command + /// + /// The command + /// The connection + /// A command + protected abstract DbCommand CreateCommand(string sql, DbConnection connection); + + /// + /// Method to create a connection based on . + /// + /// + /// A connection + protected abstract DbConnection CreateConnection(bool open = true); + + protected abstract DbParameter CreateParameter(string name, Type type, object value); + + public override Collection GetGeometriesInView(Envelope bbox) + { + var res = new Collection(); + + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectGeometries, cn)) + { + AddEnvelopeParameters(cmd, bbox); + var rdr = cmd.ExecuteReader(CommandBehavior.Default); + Debug.Assert(rdr.HasRows, "No Rows!"); + var wkbReader = new WKBReader(); + while (rdr.Read()) + { + if (!rdr.IsDBNull(0)) + res.Add(wkbReader.Read((byte[])rdr[0])); + } + } + return res; + } + + protected void AddEnvelopeParameters(DbCommand cmd, Envelope bbox) + { + cmd.Parameters.Add(CreateParameter("maxX", typeof(double), bbox.MaxX)); + cmd.Parameters.Add(CreateParameter("minX", typeof(double), bbox.MinX)); + cmd.Parameters.Add(CreateParameter("maxY", typeof(double), bbox.MaxY)); + cmd.Parameters.Add(CreateParameter("minY", typeof(double), bbox.MinY)); + } + + public override Collection GetObjectIDsInView(Envelope bbox) + { + var res = new Collection(); + + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectObjectIds, cn)) + { + AddEnvelopeParameters(cmd, bbox); + var rdr = cmd.ExecuteReader(CommandBehavior.Default); + Debug.Assert(rdr.HasRows, "No Rows!"); + while (rdr.Read()) + { + if (!rdr.IsDBNull(0)) + res.Add(Convert.ToUInt32(rdr[0])); + } + } + return res; + } + + public override IGeometry GetGeometryByID(uint oid) + { + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectGeometry, cn)) + { + cmd.Parameters.Add(CreateParameter("fid", typeof (int), oid)); + var val = cmd.ExecuteScalar(); + if (val != null) + return new WKBReader().Read((byte[])val); + return null; + } + throw new Exception("Should never reach here!"); + } + + protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + { + var p = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(geom); + + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectFeatures, cn)) + { + AddEnvelopeParameters(cmd, geom.EnvelopeInternal); + + var rdr = cmd.ExecuteReader(); + Debug.Assert(rdr.HasRows); + FeatureDataTable fdt = null; + var wkbReader = new WKBReader(); + while (rdr.Read()) + { + if (fdt == null) + { + fdt = GetBaseTable(rdr); + fdt.BeginLoadData(); + } + + var tmpGeom = wkbReader.Read((byte[]) rdr[0]); + if (!p.Intersects(tmpGeom)) continue; + + var items = new object[rdr.FieldCount - 1]; + for (var i = 1; i < rdr.FieldCount; i++) + items[i - 1] = rdr.GetValue(i); + + var fdr = (FeatureDataRow)fdt.LoadDataRow(items, true); + fdr.ItemArray = items; + fdr.Geometry = tmpGeom; + } + + if (fdt != null) + { + fdt.EndLoadData(); + ds.Tables.Add(fdt); + } + } + } + + public override void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) + { + ExecuteIntersectionQuery(Factory.ToGeometry(box), ds); + } + + public override int GetFeatureCount() + { + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectGetFeatureCount, cn)) + return (int) cmd.ExecuteScalar(); + } + + public override FeatureDataRow GetFeature(uint rowId) + { + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectFeature, cn)) + { + cmd.Parameters.Add(CreateParameter("fid", typeof (int), rowId)); + var rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); + Debug.Assert(rdr.HasRows); + rdr.Read(); + + var fdt = GetBaseTable(rdr); + var items = new object[rdr.FieldCount-1]; + for (var i = 1; i < rdr.FieldCount; i++) + items[i-1] = rdr.GetValue(i); + + + var fdr = fdt.NewRow(); + fdr.ItemArray = items; + fdr.Geometry = new WKBReader().Read((byte[])rdr[0]); + + return fdr; + } + } + + private FeatureDataTable GetBaseTable(DbDataReader rdr) + { + if (_baseTable == null) + { + _baseTable = new FeatureDataTable(); + for (var i = 1; i < rdr.FieldCount; i++) + _baseTable.Columns.Add(rdr.GetName(i), rdr.GetFieldType(i)); + } + return (FeatureDataTable)_baseTable.Copy(); + } + + public override Envelope GetExtents() + { + if (_extents != null) + return _extents; + + using (var cn = CreateConnection()) + using (var cmd = CreateCommand(_selectGetExtents, cn)) + { + var rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); + Debug.Assert(rdr.HasRows); + rdr.Read(); + return _extents = new Envelope(rdr.GetDouble(0), rdr.GetDouble(2), rdr.GetDouble(1), rdr.GetDouble(3)); + } + } + + protected string GetGeometryColumn() + { + switch (Geometry) + { + case V3DemandGeometry.Centroid: + return "CENTER"; + case V3DemandGeometry.Area: + return "AREA"; + } + throw new InvalidOperationException(); + } + + public V3DemandGeometry Geometry { get; set; } + + protected abstract string GetDataJoin(); + + protected abstract string GetData(); + + protected virtual string DecorateEntity(string entity) + { + Debug.Assert(!string.IsNullOrEmpty(entity)); + return "\"" + entity + "\""; + } + + #region insert or update geometry +#region Import + + public void ImportVenus2(string filename) + { } +#endregion + + public void Insert(FeatureDataTable fdt) + { + + } + + /// + /// Method to set a geometry + /// + /// The feature id + /// The areal geometry + public virtual void SetGeometryByID(uint fid, IGeometry area) + { + var extent = area.EnvelopeInternal; + var wkb = area.AsBinary(); + + using (var con = CreateConnection()) + { + if (!area.IsValid) + { + area = area.Buffer(0); + Debug.Assert(area.IsValid); + } + + using (var cmd = con.CreateCommand()) + { + var sb = new StringBuilder(); + var parameters = cmd.Parameters; + + if (HasGeometry(fid, con)) + { + sb.AppendFormat("UPDATE {0} SET {1}={2}", DecorateEntity("tblRegionGeom"), + DecorateEntity(GetGeometryColumn()), DecorateParameter("PGeom", area.AsBinary(), parameters)); + + if (Geometry == V3DemandGeometry.Area) + { + sb.AppendFormat(", {0}={1}", DecorateEntity("SIZE"), DecorateParameter("PSize", wkb.Length, parameters)); + sb.AppendFormat(", {0}={1}", DecorateEntity("envx1"), DecorateParameter("Penvx1", extent.MinX, parameters)); + sb.AppendFormat(", {0}={1}", DecorateEntity("envx2"), DecorateParameter("Penvx2", extent.MaxX, parameters)); + sb.AppendFormat(", {0}={1}", DecorateEntity("envy1"), DecorateParameter("Penvy1", extent.MinY, parameters)); + sb.AppendFormat(", {0}={1}", DecorateEntity("envy2"), DecorateParameter("Penvy2", extent.MaxY, parameters)); + } + sb.AppendFormat(" WHERE {0}={1};", DecorateEntity(RegionId), + DecorateParameter("PId", (int) fid, parameters)); + } + else + { + var wkbCenter = Geometry == V3DemandGeometry.Centroid ? wkb : area.PointOnSurface.AsBinary(); + + sb.AppendFormat("INSERT INTO {0} ( {1}, {2}, {3}, {4}, {5}, {6}", DecorateEntity("tblRegionGeom"), + DecorateEntity(RegionId), DecorateEntity("CENTER"), + DecorateEntity("envX1"), DecorateEntity("envX2"), + DecorateEntity("envY1"), DecorateEntity("envY2")); + + if (Geometry == V3DemandGeometry.Area) + sb.AppendFormat(",{0}, {1}", DecorateEntity("SIZE"), DecorateEntity("AREA")); + + sb.AppendFormat(") VALUES ({0}, {1}, {2}, {3}, {5}, {4}", + DecorateParameter("PId", (int) fid, cmd.Parameters), + DecorateParameter("PCenter", wkbCenter, cmd.Parameters), + DecorateParameter("PenvX1", extent.MinX, cmd.Parameters), + DecorateParameter("PenvX2", extent.MaxX, cmd.Parameters), + DecorateParameter("PenvY1", extent.MinY, cmd.Parameters), + DecorateParameter("PenvY2", extent.MaxY, cmd.Parameters)); + + if (Geometry == V3DemandGeometry.Area) + sb.AppendFormat(", {0}, {1}", DecorateParameter("PSize", wkb.Length, cmd.Parameters), + DecorateParameter("PArea", wkb, cmd.Parameters)); + + sb.Append(");"); + } + + cmd.CommandText = sb.ToString(); + cmd.ExecuteNonQuery(); + } + } + + } + + private bool HasGeometry(uint fid, DbConnection con) + { + using (var cmd = CreateCommand("", con)) + { + cmd.CommandText = string.Format("SELECT COUNT(*) FROM {0} WHERE {1}={2}", + DecorateEntity("tblRegionGeom"), + DecorateEntity(RegionId), + DecorateParameter("PId", (int) fid, cmd.Parameters)); + return Convert.ToInt32(cmd.ExecuteScalar()) == 1; + } + } + + + #endregion + + protected abstract string DecorateParameter(string name, object value, DbParameterCollection parameters); + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProviderAccess.cs b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProviderAccess.cs new file mode 100644 index 00000000..08f3bdf3 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Data/Providers/Venus3/V3DemandProviderAccess.cs @@ -0,0 +1,193 @@ +/* + * Copyright © Ingenieurgruppe IVV GmbH & Co. KG - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * + * Written by Felix Obermaier, 11.2016 + * + * This file is part of SharpMap.Data.Providers.IVV. + * + * Revision History: + * Date | Change | by + * -----------+--------------------------------------------+---------------------- + * 2016.11.14 | Initial version | Felix Obermaier + * + */ +using System; +using System.Data.Common; +using System.Data.OleDb; +using System.Diagnostics; +using System.Text; + +namespace SharpMap.Data.Providers.Venus3 +{ + public class V3DemandProviderAccess : V3DemandProvider + { + public V3DemandProviderAccess(string connectionId) + :this(0, connectionId) + { + } + + public V3DemandProviderAccess(int srid, string connectionId) + : base(srid, connectionId) + { + + _selectGetFeatureCount = "SELECT COUNT(*) FROM [tblRegionGeom];"; + _selectGetExtents = "SELECT MIN(envX1), MIN(envY1), MAX(envX2), MAX(envY2) FROM [tblRegionGeom];"; + _selectDataDefinition = "SELECT DATAID, LABEL FROM [tblDataDef];"; + + FillDataDictionary(); + //return !(other.MinX > _maxx || other.MaxX < _minx || other.MinY > _maxy || other.MaxY < _miny); + _selectObjectIds = "SELECT [REGIONID] FROM [tblRegionGeom] WHERE NOT(envX1 > ? OR envX2 <= ? OR envY1 > ? OR envY2 <= ? );"; + _selectGeometries = "SELECT %GEOM% FROM [tblRegionGeom] WHERE NOT(envX1 > ? OR envX2 <= ? OR envY1 > ? OR envY2 <= ? );"; + _selectGeometry = "SELECT %GEOM% FROM [tblRegionGeom] WHERE ([REGIONID] = ?);"; + + _selectFeatures = + "SELECT G.%GEOM% AS GEOM, G.[REGIONID], R.[LABEL], R.[MODELID], R.[LOCATION], R.[AREA], R.[REGIONTYPE], R.[FNP] %DATA%" + + "FROM (([tblRegionGeom] as G " + + "LEFT JOIN [tblRegion] as R on G.[REGIONID] = R.[REGIONID]) " + + "%DATAJOIN%) " + + "WHERE NOT(envX1 > ? OR envX2 <= ? OR envY1 > ? OR envY2 <= ? );"; + + _selectFeature = + "SELECT G.%GEOM% AS GEOM, G.[REGIONID], R.[LABEL], R.[MODELID], R.[LOCATION], R.[AREA], R.[REGIONTYPE], R.[FNP] %DATA%" + + "FROM (([tblRegionGeom] as G " + + "LEFT JOIN [tblRegion] as R on G.[REGIONID] = R.[REGIONID]) "+ + "%DATAJOIN%) " + + "WHERE (G.REGIONID = ?);"; + } + + protected override string GetData() + { + if (_selectedAttributes.Count == 0) + return string.Empty; + var sb = new StringBuilder(); + foreach (var selectedAttribute in _selectedAttributes) + { + sb.AppendFormat(", [_{0}]", selectedAttribute); + } + return sb.ToString(); + } + + protected override string GetDataJoin() + { + if (_selectedAttributes.Count == 0) + return string.Empty; + + if (_selectDataSubQuery == null) + { + var sb = new StringBuilder(string.Format("SELECT {0}", DecorateEntity(RegionId))); + foreach (var selectedAttribute in _selectedAttributes) + sb.AppendFormat(", SUM({0}) AS {1}", + DecorateEntity(selectedAttribute), + DecorateEntity("_" + selectedAttribute)); + sb.AppendLine(" FROM ("); + + sb.Append("SELECT REGIONID"); + foreach (var selectedAttribute in _selectedAttributes) + sb.AppendFormat(", {0} AS {1}", 0, DecorateEntity(selectedAttribute)); + sb.AppendFormat(" FROM {0}", DecorateEntity("tblRegion")); + //foreach (var selectedAttribute in _selectedAttributes) + { + for (var i = 0; i < _selectedAttributes.Count; i++) + { + sb.AppendLine(); + sb.AppendFormat("UNION SELECT {0}", DecorateEntity(RegionId)); + + for (var j = 0; j < i; j++) + sb.AppendFormat(", {0} AS {1}", 0, DecorateEntity(_selectedAttributes[j])); + sb.AppendFormat(", {0} AS {1}", DecorateEntity("VALUE"), DecorateEntity(_selectedAttributes[i])); + for (var j = i + 1; j < _selectedAttributes.Count; j++) + sb.AppendFormat(", {0} AS {1}", 0, DecorateEntity(_selectedAttributes[j])); + sb.AppendFormat(" FROM {0} WHERE {1}={2}", + DecorateEntity("tblData"), DecorateEntity("DATAID"), + _attributes[_selectedAttributes[i]]); + } + } + sb.AppendFormat(") GROUP BY {0}", DecorateEntity(RegionId)); + + _selectDataSubQuery = sb.ToString(); + Trace.WriteLine(string.Format("\n{0};", _selectDataSubQuery)); + } + + return "LEFT JOIN (" + _selectDataSubQuery + string.Format(") AS D ON D.{0} = G.{0} ", DecorateEntity(RegionId)); + } + + protected override string DecorateEntity(string entity) + { + return "[" + entity + "]"; + } + + protected override DbCommand CreateCommand(string sql, DbConnection connection) + { + sql = sql.Replace("%GEOM%", GetGeometryColumn()); + sql = sql.Replace("%DATA%", GetData()); + sql = sql.Replace("%DATAJOIN%", GetDataJoin()); + var res = new OleDbCommand(sql, (OleDbConnection)connection); + return res; + } + + protected override DbConnection CreateConnection(bool open = true) + { + var res = new OleDbConnection(ConnectionID); + res.Open(); + return res; + } + + protected override DbParameter CreateParameter(string name, Type type, object value) + { + var res = new OleDbParameter(name, ToOleDbType(type)); + res.Value = value; + return res; + + } + + private static OleDbType ToOleDbType(Type type) + { + switch (Type.GetTypeCode(type)) + { + case TypeCode.String: + return OleDbType.VarChar; + case TypeCode.Boolean: + return OleDbType.Boolean; + case TypeCode.Byte: + return OleDbType.UnsignedSmallInt; + case TypeCode.Char: + return OleDbType.TinyInt; + case TypeCode.SByte: + return OleDbType.Char; + case TypeCode.DateTime: + return OleDbType.Date; + case TypeCode.Decimal: + return OleDbType.Decimal; + case TypeCode.Double: + return OleDbType.Double; + case TypeCode.Single: + return OleDbType.Single; + case TypeCode.Int16: + return OleDbType.SmallInt; + case TypeCode.Int32: + return OleDbType.Integer; + case TypeCode.Int64: + return OleDbType.BigInt; + case TypeCode.UInt16: + return OleDbType.UnsignedSmallInt; + case TypeCode.UInt32: + return OleDbType.UnsignedInt; + case TypeCode.UInt64: + return OleDbType.UnsignedBigInt; + case TypeCode.Object: + return OleDbType.VarBinary; + } + throw new NotSupportedException(); + } + + protected override string DecorateParameter(string name, object value, DbParameterCollection parameters) + { + var par = CreateParameter(name, value.GetType(), value); + parameters.Add(par); + + return "?"; + } + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Properties/AssemblyInfo.cs b/SharpMap.Data.Providers.IVV/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c86e2373 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SharpMap.Data.Providers.IVV")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SharpMap.Data.Providers.IVV")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7acf7750-732a-4da3-86ab-c30a1bea0a46")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj b/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj new file mode 100644 index 00000000..81173e47 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67} + Library + Properties + SharpMap + SharpMap.Data.Providers.IVV + v4.0 + 512 + Client + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll + True + + + ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll + True + + + ..\packages\NUnit.2.6.3\lib\nunit.framework.dll + True + + + ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {c83777fc-aabb-47d9-911f-d76255d4d541} + SharpMap + + + + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings b/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings new file mode 100644 index 00000000..c9927152 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs b/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs new file mode 100644 index 00000000..cbd51301 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.ObjectModel; +using System.Data; +using System.IO; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Data.Providers.Venus3; + +namespace SharpMap.Test +{ + public class V3DemandProviderTests + { + private static string GetConnectionString(string mdb) + { + return string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=False;", mdb); + } + + [TestCase(@"D:\VenusDaten\V3\DFN\A0\DFN2950.mdb", V3DemandGeometry.Centroid)] + [TestCase(@"D:\VenusDaten\V3\DFN\A0\DFN2950.mdb", V3DemandGeometry.Area)] + [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb", V3DemandGeometry.Area)] + [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb", V3DemandGeometry.Centroid)] + [TestCase(@"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb", V3DemandGeometry.Area)] + [TestCase(@"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb", V3DemandGeometry.Centroid)] + // @"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb" + public void TestAccess(string mdb, V3DemandGeometry v3geom) + { + V3DemandProvider v3p = null; + Assert.DoesNotThrow( () => v3p = new V3DemandProviderAccess(0, GetConnectionString(mdb))); + v3p.Geometry = v3geom; + + // num features + Assert.Greater(v3p.GetFeatureCount(), 0, "v3p.GetFeatureCount() > 0"); + + // extent + Envelope extent = null; + Assert.DoesNotThrow(() => extent = v3p.GetExtents(), "exception"); + Assert.IsNotNull(extent, "extent != null"); + Assert.IsFalse(extent.IsNull, "extent.IsNull"); + + + // object Id + Collection ids = null; + Assert.DoesNotThrow(() => ids = v3p.GetObjectIDsInView(extent)); + Assert.IsNotNull(ids, "ids != null"); + Assert.Greater(ids.Count, 0, "ids.Count > 0"); + + // geometries + Collection geometries = null; + Assert.DoesNotThrow(() => geometries = v3p.GetGeometriesInView(extent)); + Assert.IsNotNull(geometries, "geometries != null"); + Assert.Greater(geometries.Count, 0, "geometries.Count > 0"); + + var rnd = new Random(); + // geometry single access + for (var i = 0; i < 5; i++) + { + IGeometry fdr = null; + Assert.DoesNotThrow(() => fdr = v3p.GetGeometryByID(ids[rnd.Next(0, ids.Count - 1)])); + Assert.IsNotNull(fdr, "fdr != null"); + //Assert.IsFalse(fdr.IsFeatureGeometryNull()); + } + + // features + for (var i = 0; i < 5; i++) + { + FeatureDataRow fdr = null; + Assert.DoesNotThrow(() => fdr = v3p.GetFeature(ids[rnd.Next(0, ids.Count - 1)])); + Assert.IsNotNull(fdr, "fdr != null"); + Assert.IsFalse(fdr.IsFeatureGeometryNull()); + } + + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(extent, fds)); + Assert.IsTrue(fds.Tables.Count == 1); + Assert.IsTrue(fds.Tables[0].Rows.Count == v3p.GetFeatureCount()); + + var ext2 = new Envelope(extent); + ext2.ExpandBy(-0.3*extent.Width); + Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(ext2, fds)); + Assert.IsTrue(fds.Tables.Count == 2); + Assert.IsTrue(fds.Tables[1].Rows.Count < fds.Tables[0].Rows.Count); + + v3p.Include("EINW"); + v3p.Include("ERW"); + v3p.Include("SCHST"); + Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(ext2, fds)); + Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_EINW") > -1); + Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_ERW") > -1); + Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_SCHST") > -1); + //Assert.IsTrue(fds.Tables.Count == 3); + //Assert.IsTrue(fds.Tables[0].Rows.Count < fds.Tables[1].Rows.Count); + + } + + [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM_a0.zgs", + @"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb")] + [TestCase(@"D:\Projekte\BAM3473\Modell\D_2015_160106\BAM_a0.zgs", + @"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb")] + [Ignore("Run explicitly")] + public void AddGeometries(string v2file, string v3file) + { + var v2zkk = Path.ChangeExtension(v2file, "zkk"); + var v2zpz = Path.ChangeExtension(v2file, "zpz"); + var zkk = xKKProvider.Load(v2zkk); + var zpz = ZPZProvider.Load(v2zpz, zkk); + + var v3a = new V3DemandProviderAccess(31466, GetConnectionString(v3file)); + v3a.Geometry = V3DemandGeometry.Area; + + var count = zpz.GetFeatureCount(); + for (var i = 0; i < count; i++) + { + var id = (uint) i + 1; + var itm = zpz.GetGeometryByID(id); + if (itm != null && !itm.IsEmpty) + v3a.SetGeometryByID(id, itm); + if (i%10 == 0) Console.Write("."); + } + Console.WriteLine(); + } + } +} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Test/xKKTests.cs b/SharpMap.Data.Providers.IVV/Test/xKKTests.cs new file mode 100644 index 00000000..aef330c5 --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Test/xKKTests.cs @@ -0,0 +1,95 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using NUnit.Framework; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering; +using SharpMap.Rendering.Thematics; +using SharpMap.Styles; + +#if DEBUG + +namespace SharpMap.Test +{ + public class xKKTests + { + [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zkk")] + public void TestxKK(string filename) + { + xKKProvider p = null; + + Assert.DoesNotThrow(() => p = xKKProvider.Load(filename)); + Assert.That(p != null, "p != null"); + Assert.That(p.ConnectionID == filename); + + var m = new Map(); + m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p) + { Style = new VectorStyle{PointSize = 2f}}); + + m.ZoomToExtents(); + using (var img = m.GetMap()) + { img.Save(System.IO.Path.ChangeExtension(filename, "png"));} + } + + [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zpz")] + public void TestZPZ(string filename) + { + xKKProvider p = null; + + Assert.DoesNotThrow(() => p = xKKProvider.Load(System.IO.Path.ChangeExtension(filename, "zkk"))); + Assert.That(p != null, "p != null"); + + ZPZProvider p2 = null; + Assert.DoesNotThrow(() => p2 = ZPZProvider.Load(filename, p)); + Assert.That(p != null, "p2 != null"); + + var m = new Map(); + m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p2) { Style = new VectorStyle + { + Fill = new SolidBrush(Color.Lavender), + Outline = Pens.DodgerBlue, EnableOutline = true + } }); + + m.ZoomToExtents(); + using (var img = m.GetMap()) + { img.Save(System.IO.Path.ChangeExtension(filename, "png")); } + } + + + [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zgs")] + public void TestZGS(string filename) + { + xKKProvider p = null; + + Assert.DoesNotThrow(() => p = xKKProvider.Load(System.IO.Path.ChangeExtension(filename, "zkk"))); + Assert.That(p != null, "p != null"); + //Assert.That(p.ConnectionID == filename); + + xxSProvider p2 = null; + Assert.DoesNotThrow(() => p2 = xxSProvider.Load(filename, ZGS.Create, p)); + Assert.That(p2 != null, "p != null"); + + + var m = new Map(); + var styles = new Dictionary(); + styles.Add(1, new VectorStyle{Line = Pens.Gainsboro }); + styles.Add(2, new VectorStyle{Line = Pens.Gainsboro }); + styles.Add(3, new VectorStyle{Line = Pens.DarkGray}); + styles.Add(4, new VectorStyle{Line = Pens.Black }); + styles.Add(5, new VectorStyle{Line = new Pen(Color.Green, 2)}); + styles.Add(6, new VectorStyle{Line = new Pen(Color.OrangeRed, 3) }); + styles.Add(7, new VectorStyle{Line = new Pen(Color.Blue, 4) {EndCap = LineCap.Round, StartCap = LineCap.Round}}); + m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p2) + { + Theme = new UniqueValuesTheme("ART",styles, new VectorStyle { Line = new Pen(Color.Aqua, 1) { DashStyle = DashStyle.Dot}}) + }); + + m.ZoomToExtents(); + using (var img = m.GetMap()) + { img.Save(System.IO.Path.ChangeExtension(filename, "png")); } + } + } +} + +#endif \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Utilities/Class1.cs b/SharpMap.Data.Providers.IVV/Utilities/Class1.cs new file mode 100644 index 00000000..7067d82e --- /dev/null +++ b/SharpMap.Data.Providers.IVV/Utilities/Class1.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace SharpMap.Utilities +{ + internal class Utilities + { + public static string ReadVersion(BinaryReader reader) + { + var bytes = reader.ReadBytes(6); + return Win1252.Value.GetString(bytes); + } + + public static Lazy Win1252 { get { return new Lazy( () => Encoding.Default);} } + } +} diff --git a/SharpMap.Data.Providers.IVV/packages.config b/SharpMap.Data.Providers.IVV/packages.config new file mode 100644 index 00000000..eb4485fc --- /dev/null +++ b/SharpMap.Data.Providers.IVV/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.OracleSpatial/OracleSpatial.cs b/SharpMap.Data.Providers.OracleSpatial/OracleSpatial.cs index ed3fe427..0f1c3cb9 100644 --- a/SharpMap.Data.Providers.OracleSpatial/OracleSpatial.cs +++ b/SharpMap.Data.Providers.OracleSpatial/OracleSpatial.cs @@ -523,4 +523,500 @@ public void GetFeaturesInView(Envelope bbox, FeatureDataSet ds) ExecuteIntersectionQuery(bbox, ds); } } + + /// + /// Oracle Spatial Data Provider + /// Uses ODP.NET, ODAC and UserDefinedTypes to access OracleSpatial data to get enhanced performance compared to Managed Data Access + /// + /// Deployment need to have the same version of Oracle DataAccess and ODAC as built against for UDT's to work properly. + /// XCopy + /// Oracle.DataAccess.dll + /// oci.dll + /// orannzsbb11.dll + /// oraociicus11.dll + /// OraOps11W.dll + /// + /// from build-directoy to deployment directory to run + /// + /// + /// + /// Adding a datasource to a layer: + /// + /// SharpMap.Layers.VectorLayer myLayer = new SharpMap.Layers.VectorLayer("My layer"); + /// string ConnStr = "Server=127.0.0.1;Port=5432;User Id=userid;Password=password;Database=myGisDb;"; + /// myLayer.DataSource = new SharpMap.Data.Providers.Oracle(ConnStr, "myTable", "GeomColumn", "OidColumn"); + /// + /// + /// + [Serializable] + public class OracleSpatial : BaseProvider where TOid:IComparable + { + private string _definitionQuery; + private string _geometryColumn; + private string _objectIdColumn; + private string _table; + + /// + /// Initializes a new connection to Oracle + /// + /// Connectionstring + /// Name of data table + /// Name of geometry column + /// /// Name of column with unique identifier + public OracleSpatial(string connectionStr, string tablename, string geometryColumnName, string oidColumnName) + : base(-2) + { + ConnectionString = connectionStr; + Table = tablename; + GeometryColumn = geometryColumnName; + ObjectIdColumn = oidColumnName; + } + + /// + /// Initializes a new connection to Oracle + /// + /// Username + /// Password + /// Datasoure + /// Tablename + /// Geometry column name + /// Object ID column + public OracleSpatial(string username, string password, string datasource, string tablename, string geometryColumnName, + string oidColumnName) + : this( + "User Id=" + username + ";Password=" + password + ";Data Source=" + datasource, tablename, + geometryColumnName, oidColumnName) + { + } + + + /// + /// Initializes a new connection to Oracle + /// + /// Connectionstring + /// Name of data table + /// Name of column with unique identifier + public OracleSpatial(string connectionStr, string tablename, string oidColumnName) + : this(connectionStr, tablename, "", oidColumnName) + { + GeometryColumn = GetGeometryColumn(); + } + + /// + /// Connectionstring + /// + public string ConnectionString + { + get { return ConnectionID; } + set { ConnectionID = value; } + } + + /// + /// Data table name + /// + public string Table + { + get { return _table; } + set { _table = value; } + } + + /// + /// Name of geometry column + /// + public string GeometryColumn + { + get { return _geometryColumn; } + set { _geometryColumn = value; } + } + + /// + /// Name of column that contains the Object ID + /// + public string ObjectIdColumn + { + get { return _objectIdColumn; } + set { _objectIdColumn = value; } + } + + /// + /// Definition query used for limiting dataset + /// + public string DefinitionQuery + { + get { return _definitionQuery; } + set { _definitionQuery = value; } + } + + #region IProvider Members + + /// + /// Returns geometries within the specified bounding box + /// + /// + /// + public override Collection GetGeometriesInView(Envelope bbox) + { + var features = new Collection(); + using (var conn = new OracleConnection(ConnectionString)) + { + //Get bounding box string + string strBbox = GetBoxFilterStr(bbox); + + //string strSQL = "SELECT AsBinary(" + this.GeometryColumn + ") AS Geom "; + string strSql = "SELECT g." + GeometryColumn + " as Geom "; + strSql += " FROM " + Table + " g WHERE "; + + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += DefinitionQuery + " AND "; + + strSql += strBbox; + + using (var command = new OracleCommand(strSql, conn)) + { + conn.Open(); + using (OracleDataReader dr = command.ExecuteReader()) + { + while (dr.Read()) + { + if (dr[0] != DBNull.Value) + { + var geom = dr[0] as SdoGeometry; + if (geom != null) + features.Add(geom.AsGeometry()); + } + } + } + conn.Close(); + } + } + return features; + } + + /// + /// Returns the geometry corresponding to the Object ID + /// + /// Object ID + /// geometry + public override Geometry GetGeometryByID(TOid oid) + { + Geometry geom = null; + using (var conn = new OracleConnection(ConnectionString)) + { + string strSql = "SELECT g." + GeometryColumn + " as Geom FROM " + Table + " g WHERE " + ObjectIdColumn + + "='" + oid + "'"; + conn.Open(); + using (var command = new OracleCommand(strSql, conn)) + { + using (OracleDataReader dr = command.ExecuteReader()) + { + while (dr.Read()) + { + if (dr[0] != DBNull.Value) + { + var sdoGeom = dr[0] as SdoGeometry; + if (sdoGeom != null) + geom = sdoGeom.AsGeometry(); + } + } + } + } + conn.Close(); + } + return geom; + } + + /// + /// Returns geometry Object IDs whose bounding box intersects 'bbox' + /// + /// + /// + public override Collection GetObjectIDsInView(Envelope bbox) + { + var objectlist = new Collection(); + using (var conn = new OracleConnection(ConnectionString)) + { + //Get bounding box string + string strBbox = GetBoxFilterStr(bbox); + + string strSql = "SELECT g." + ObjectIdColumn + " "; + strSql += "FROM " + Table + " g WHERE "; + + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += DefinitionQuery + " AND "; + + strSql += strBbox; + + using (var command = new OracleCommand(strSql, conn)) + { + conn.Open(); + using (OracleDataReader dr = command.ExecuteReader()) + { + while (dr.Read()) + { + if (dr[0] != DBNull.Value) + { + var id = (TOid)dr[0]; + objectlist.Add(id); + } + } + } + conn.Close(); + } + } + return objectlist; + } + + /// + /// Returns the features that intersects with 'geom' + /// + /// + /// FeatureDataSet to fill data into + protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) + { + using (var conn = new OracleConnection(ConnectionString)) + { + string strGeom = "MDSYS.SDO_GEOMETRY('" + geom.AsText() + "', #SRID#)"; + + strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(Map.NumberFormatEnUs) : "NULL"); + + strGeom = "SDO_RELATE(g." + GeometryColumn + ", " + strGeom + + ", 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'"; + + string strSql = "SELECT * FROM " + + Table + " g WHERE "; + + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += DefinitionQuery + " AND "; + + strSql += strGeom; + + using (var adapter = new OracleDataAdapter(strSql, conn)) + { + using (var sourceDataSet = new DataSet()) + { + conn.Open(); + adapter.Fill(sourceDataSet); + conn.Close(); + if (sourceDataSet.Tables.Count > 0) + { + var fdt = new FeatureDataTable(sourceDataSet.Tables[0]); + foreach (DataColumn col in sourceDataSet.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + foreach (DataRow dr in sourceDataSet.Tables[0].Rows) + { + var fdr = fdt.NewRow(); + foreach (DataColumn col in sourceDataSet.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdr[col.ColumnName] = dr[col]; + var sdoGeometry = dr[GeometryColumn] as SdoGeometry; + + if (sdoGeometry != null) + { + fdr.Geometry = sdoGeometry.AsGeometry(); + } + + fdt.AddRow(fdr); + } + ds.Tables.Add(fdt); + } + } + } + } + } + + /// + /// Returns the number of features in the dataset + /// + /// number of features + public override int GetFeatureCount() + { + using (var conn = new OracleConnection(ConnectionString)) + { + string strSql = "SELECT COUNT(*) FROM " + Table; + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += " WHERE " + DefinitionQuery; + using (var command = new OracleCommand(strSql, conn)) + { + conn.Open(); + return Convert.ToInt32(command.ExecuteScalar()); + } + } + } + + /// + /// Returns a datarow based on a RowID + /// + /// + /// datarow + public override FeatureDataRow GetFeature(TOid rowId) + { + using (var conn = new OracleConnection(ConnectionString)) + { + string strSql = "select * from " + + Table + " g WHERE " + ObjectIdColumn + "='" + rowId + "'"; + using (var adapter = new OracleDataAdapter(strSql, conn)) + { + var sourceDataset = new DataSet(); + conn.Open(); + adapter.Fill(sourceDataset); + conn.Close(); + if (sourceDataset.Tables.Count > 0) + { + var fdt = new FeatureDataTable(sourceDataset.Tables[0]); + foreach (DataColumn col in sourceDataset.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + + if (sourceDataset.Tables[0].Rows.Count > 0) + { + DataRow dr = sourceDataset.Tables[0].Rows[0]; + var fdr = fdt.NewRow(); + foreach (DataColumn col in sourceDataset.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdr[col.ColumnName] = dr[col]; + + var sdoGeom = fdr[GeometryColumn] as SdoGeometry; + if (sdoGeom != null) + fdr.Geometry = sdoGeom.AsGeometry(); + return fdr; + } + + return null; + } + return null; + } + } + } + + /// + /// Boundingbox of dataset + /// + /// boundingbox + public override Envelope GetExtents() + { + using (var conn = new OracleConnection(ConnectionString)) + { + string strSql = "SELECT SDO_AGGR_MBR(g." + GeometryColumn + ") FROM " + Table + " g "; + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += " WHERE " + DefinitionQuery; + using (var command = new OracleCommand(strSql, conn)) + { + conn.Open(); + var result = command.ExecuteScalar(); + conn.Close(); + if (result == null || result == DBNull.Value || !(result is SdoGeometry)) + return null; + + var geom = (result as SdoGeometry).AsGeometry(); + return geom.EnvelopeInternal; + } + } + } + + /// + /// Returns all features with the view box + /// + /// view box + /// FeatureDataSet to fill data into + public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) + { + using (var conn = new OracleConnection(ConnectionString)) + { + //Get bounding box string + var strBbox = GetBoxFilterStr(bbox); + + var strSql = "SELECT * "; + strSql += "FROM " + Table + " g WHERE "; + + if (!String.IsNullOrEmpty(_definitionQuery)) + strSql += DefinitionQuery + " AND "; + + strSql += strBbox; + + using (var adapter = new OracleDataAdapter(strSql, conn)) + { + conn.Open(); + var ds2 = new DataSet(); + adapter.Fill(ds2); + conn.Close(); + if (ds2.Tables.Count > 0) + { + var fdt = new FeatureDataTable(ds2.Tables[0]); + foreach (DataColumn col in ds2.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + foreach (DataRow dr in ds2.Tables[0].Rows) + { + FeatureDataRow fdr = fdt.NewRow(); + foreach (DataColumn col in ds2.Tables[0].Columns) + if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) + fdr[col.ColumnName] = dr[col]; + + var sdoGeom = dr[GeometryColumn] as SdoGeometry; + if (sdoGeom != null) + fdr.Geometry = sdoGeom.AsGeometry(); + + fdt.AddRow(fdr); + } + ds.Tables.Add(fdt); + } + } + } + } + + #endregion + + /// + /// Returns the box filter string needed in SQL query + /// + /// + /// + protected string GetBoxFilterStr(Envelope bbox) + { + string strBbox = "SDO_FILTER(g." + GeometryColumn + ", mdsys.sdo_geometry(2003,#SRID#,NULL," + + "mdsys.sdo_elem_info_array(1,1003,3)," + + "mdsys.sdo_ordinate_array(" + + bbox.MinX.ToString(Map.NumberFormatEnUs) + ", " + + bbox.MinY.ToString(Map.NumberFormatEnUs) + ", " + + bbox.MaxX.ToString(Map.NumberFormatEnUs) + ", " + + bbox.MaxY.ToString(Map.NumberFormatEnUs) + ")), " + + "'querytype=window') = 'TRUE'"; + + strBbox = strBbox.Replace("#SRID#", SRID > 0 ? SRID.ToString(Map.NumberFormatEnUs) : "NULL"); + return strBbox; + } + + /// + /// Queries the Oracle database to get the name of the Geometry Column. This is used if the columnname isn't specified in the constructor + /// + /// + /// Name of column containing geometry + private string GetGeometryColumn() + { + string strSql = "select COLUMN_NAME from USER_SDO_GEOM_METADATA WHERE TABLE_NAME='" + Table + "'"; + using (var conn = new OracleConnection(ConnectionString)) + using (var command = new OracleCommand(strSql, conn)) + { + conn.Open(); + object columnname = command.ExecuteScalar(); + conn.Close(); + if (columnname == DBNull.Value) + throw new ApplicationException("Table '" + Table + "' does not contain a geometry column"); + return (string)columnname; + } + } + + /// + /// Returns all features with the view box + /// + /// view box + /// FeatureDataSet to fill data into + [Obsolete("Use ExecuteIntersectionQuery(box) instead")] + public void GetFeaturesInView(Envelope bbox, FeatureDataSet ds) + { + ExecuteIntersectionQuery(bbox, ds); + } + } + } \ No newline at end of file diff --git a/SharpMap.Extensions.nuspec b/SharpMap.Extensions.nuspec index 69bdc2c0..7a07f5a5 100644 --- a/SharpMap.Extensions.nuspec +++ b/SharpMap.Extensions.nuspec @@ -23,7 +23,7 @@ The engine is written in C# and based on the .Net 4.0 framework. - + diff --git a/SharpMap.Extensions/Data/Providers/NtsProvider.cs b/SharpMap.Extensions/Data/Providers/NtsProvider.cs index 07da21e7..ddfceeaa 100644 --- a/SharpMap.Extensions/Data/Providers/NtsProvider.cs +++ b/SharpMap.Extensions/Data/Providers/NtsProvider.cs @@ -238,6 +238,10 @@ private void BuildFromProvider(IProvider provider) if (provider.IsOpen) provider.Close(); } + + // Setting factory and spatial reference id; + Factory = _features[0].Geometry.Factory; + SRID = Factory.SRID; } #endregion diff --git a/SharpMap.Extensions/SharpMap.Extensions.csproj b/SharpMap.Extensions/SharpMap.Extensions.csproj index c89c839e..4d1bbf9b 100644 --- a/SharpMap.Extensions/SharpMap.Extensions.csproj +++ b/SharpMap.Extensions/SharpMap.Extensions.csproj @@ -64,6 +64,10 @@ ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll True + + ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll + True + ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll True @@ -96,6 +100,10 @@ ..\packages\NetTopologySuite.IO.SpatiaLite.1.14\lib\net40-client\NetTopologySuite.IO.SpatiaLite.dll True + + ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll + True + ..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll True @@ -120,12 +128,6 @@ - - ..\packages\Npgsql.2.2.4.3\lib\net40\Mono.Security.dll - - - ..\packages\Npgsql.2.2.4.3\lib\net40\Npgsql.dll - ..\packages\Oracle.ManagedDataAccess.12.1.2400\lib\net40\Oracle.ManagedDataAccess.dll diff --git a/SharpMap.Extensions/packages.config b/SharpMap.Extensions/packages.config index 75d3c540..2db2fa53 100644 --- a/SharpMap.Extensions/packages.config +++ b/SharpMap.Extensions/packages.config @@ -7,7 +7,7 @@ - + diff --git a/SharpMap.UI/Forms/Tools/FeatureEditorTool.cs b/SharpMap.UI/Forms/Tools/FeatureEditorTool.cs new file mode 100644 index 00000000..1653148c --- /dev/null +++ b/SharpMap.UI/Forms/Tools/FeatureEditorTool.cs @@ -0,0 +1,18 @@ +namespace SharpMap.Forms.Tools +{ + public class FeatureSelectTool : MapTool + { + public FeatureSelectTool() + : base("FeatureEditorTool", "A tool to select features") + { + } + } + + public class FeatureEditorTool : MapTool + { + public FeatureEditorTool() + : base("FeatureEditorTool", "A tool to edit features") + { + } + } +} \ No newline at end of file diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index 86b79780..09eb4205 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -99,6 +99,7 @@ Component + diff --git a/SharpMap.sln b/SharpMap.sln index 7e0cb633..280eb5cb 100644 --- a/SharpMap.sln +++ b/SharpMap.sln @@ -116,6 +116,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Converters.Spatial EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.CoordinateSystems.DotSpatial", "SharpMap.CoordinateSystems.DotSpatial\SharpMap.CoordinateSystems.DotSpatial.csproj", "{A019B82E-3766-44A3-907A-0487FF9EBA49}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Data.Providers.IVV", "SharpMap.Data.Providers.IVV\SharpMap.Data.Providers.IVV.csproj", "{12672EAE-C40B-4E6C-9645-E59E15A01E67}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET @@ -617,6 +619,30 @@ Global {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|x86.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|.NET.ActiveCfg = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|.NET.Build.0 = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|x86.ActiveCfg = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Debug|x86.Build.0 = Debug|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|.NET.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|.NET.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|Any CPU.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|x86.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.Release|x86.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|.NET.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU + {12672EAE-C40B-4E6C-9645-E59E15A01E67}.ReleaseLinux|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SharpMap/Data/FeatureDataSet.cs b/SharpMap/Data/FeatureDataSet.cs index 62b87244..21df7e3e 100644 --- a/SharpMap/Data/FeatureDataSet.cs +++ b/SharpMap/Data/FeatureDataSet.cs @@ -868,7 +868,19 @@ public FeatureDataRow(DataRowBuilder rb) public IGeometry Geometry { get { return _geometry; } - set { _geometry = value; } + set + { + if (_geometry == null) { + _geometry = value; + } else { + if (ReferenceEquals(_geometry, value)) + return; + if (_geometry != null && _geometry.EqualsTopologically(value)) + return; + _geometry = value; + if (RowState == DataRowState.Unchanged) SetModified(); + } + } } /// diff --git a/SharpMap/Data/Providers/BaseProvider.cs b/SharpMap/Data/Providers/BaseProvider.cs index 24d1c4f3..8ac255cb 100644 --- a/SharpMap/Data/Providers/BaseProvider.cs +++ b/SharpMap/Data/Providers/BaseProvider.cs @@ -238,4 +238,237 @@ protected static FeatureDataTable CloneTableStructure(FeatureDataTable baseTable return res; } } + + /// + /// Abstract base provider that handles geometry factory based on SRID + /// + [Serializable] + public abstract class BaseProvider : DisposableObject, IProvider + where TOid: IComparable + { + static BaseProvider() + { + Map.Configure(); + } + + private int _srid; + private bool _isOpen; + + /// + /// Event raised when has changed + /// + public event EventHandler SridChanged; + + /// + /// Gets or sets the factory to create geometries. + /// + public IGeometryFactory Factory { get; protected set; } + + /// + /// Creates an instance of this class. The is set to , + /// the spatial reference id to 0 and an appropriate factory is chosen. + /// + protected BaseProvider() + : this(0) + { + } + + /// + /// Creates an instance of this class. The is set to , + /// the spatial reference id to and an appropriate factory is chosen. + /// + /// The spatial reference id + protected BaseProvider(int srid) + { + ConnectionID = string.Empty; + SRID = srid; + Factory = GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); + } + + /// + /// Releases all managed resources + /// + protected override void ReleaseManagedResources() + { + Factory = null; + base.ReleaseManagedResources(); + } + + #region Implementation of IProvider + + /// + /// Gets the connection ID of the datasource + /// + /// + /// The ConnectionID should be unique to the datasource (for instance the filename or the + /// connectionstring), and is meant to be used for connection pooling. + /// If connection pooling doesn't apply to this datasource, the ConnectionID should return String.Empty + /// + public string ConnectionID { get; protected set; } + + /// + /// Returns true if the datasource is currently open + /// + public virtual bool IsOpen { get { return _isOpen; } } + + /// + /// The spatial reference ID (CRS) + /// + public int SRID + { + get { return _srid; } + set + { + if (value != _srid) + { + _srid = value; + OnSridChanged(EventArgs.Empty); + } + } + } + + /// + /// Handler method to handle changes of . + /// + /// Event arguments. + protected virtual void OnSridChanged(EventArgs eventArgs) + { + Factory = GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); + + if (SridChanged != null) + SridChanged(this, eventArgs); + } + + /// + /// Gets the features within the specified + /// + /// + /// Features within the specified + public abstract Collection GetGeometriesInView(Envelope bbox); + + /// + /// Returns all objects whose intersects 'bbox'. + /// + /// + /// This method is usually much faster than the QueryFeatures method, because intersection tests + /// are performed on objects simplified by their , and using the Spatial Index + /// + /// Box that objects should intersect + /// + public abstract Collection GetObjectIDsInView(Envelope bbox); + + /// + /// Returns the geometry corresponding to the Object ID + /// + /// Object ID + /// geometry + public abstract IGeometry GetGeometryByID(TOid oid); + + /// + /// Returns the data associated with all the geometries that are intersected by 'geom' + /// + /// Geometry to intersect with + /// FeatureDataSet to fill data into + public void ExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + { + OnBeginExecuteIntersectionQuery(geom); + OnExecuteIntersectionQuery(geom, ds); + OnEndExecuteIntersectionQuery(); + } + + /// + /// Method to perform preparatory things for executing an intersection query against the data source + /// + /// The geometry to use as filter. + protected virtual void OnBeginExecuteIntersectionQuery(IGeometry geom) + { + } + + /// + /// Method to perform the intersection query against the data source + /// + /// The geometry to use as filter + /// The feature data set to store the results in + protected abstract void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds); + + /// + /// Method to do cleanup work after having performed the intersection query against the data source + /// + protected virtual void OnEndExecuteIntersectionQuery() + { + } + + /// + /// Returns the data associated with all the geometries that are intersected by 'geom' + /// + /// Geometry to intersect with + /// FeatureDataSet to fill data into + public abstract void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds); + + /// + /// Function to return the total number of features in the dataset + /// + /// The number of features + public abstract int GetFeatureCount(); + + /// + /// Function to return a based on RowID + /// + /// The unique identifier of the row + /// datarow + public abstract FeatureDataRow GetFeature(TOid rowId); + + /// + /// Function to return the of dataset + /// + /// The extent of the dataset + public abstract Envelope GetExtents(); + + /// + /// Opens the datasource + /// + public virtual void Open() + { + _isOpen = true; + } + + /// + /// Closes the datasource + /// + public virtual void Close() + { + _isOpen = false; + } + + #endregion + + /// + /// Method to clone the feature data tables schema. + /// + /// The feature data table + /// An empty feature data table, having the same schema as + protected static FeatureDataTable CloneTableStructure(FeatureDataTable baseTable) + { + var res = new FeatureDataTable(baseTable); + var cols = res.Columns; + foreach (DataColumn column in baseTable.Columns) + { + cols.Add(new DataColumn(column.ColumnName, column.DataType, column.Expression, column.ColumnMapping) + + /*{AllowDBNull = column.AllowDBNull, AutoIncrement = column.AutoIncrement, AutoIncrementSeed = column.AutoIncrementSeed, + AutoIncrementStep = column.AutoIncrementStep, Caption = column.Caption}*/); + } + /* + var constraints = res.Constraints; + foreach (var constraint in baseTable.Constraints) + { + var uc = constraint as UniqueConstraint; + if (uc != null) + { + } + } + */ + return res; + } + } } \ No newline at end of file diff --git a/SharpMap/Drawing/Matrix.cs b/SharpMap/Drawing/Matrix.cs new file mode 100644 index 00000000..99d44a1a --- /dev/null +++ b/SharpMap/Drawing/Matrix.cs @@ -0,0 +1,118 @@ +using System; + +namespace SharpMap.Drawing +{ + public sealed class Matrix + { + private static readonly Matrix _identity = new Matrix(); + + public static Matrix Identity { get { return _identity; } } + + + private readonly double[] _elements ; + + public Matrix() + : this(new[] {1d, 0, 0, 1, 0, 0, 0, 0, 0}) + { + } + + public Matrix(double[] elements) + { + _elements = new double[9]; + Array.Copy(elements, _elements, Math.Min(elements.Length, 9)); + } + + + public bool IsIdentity { get; } + + public double [] Elements { get { return _elements; } } + + public double ScaleX { get { return M11; } set { M11 = value; } } + + public double M11 { get { return _elements[0]; } set { _elements[0] = value; } } + public double ShearY { get { return M12; } set { M12 = value; } } + public double M12 { get { return _elements[1]; } set { _elements[1] = value; } } + public double ShearX { get { return M21; } set { M22 = value; } } + public double M21 { get { return _elements[2]; } set { _elements[2] = value; } } + public double ScaleY { get { return M11; } set { M11 = value; } } + public double M22 { get { return _elements[3]; } set { _elements[3] = value; } } + public double OffsetX { get { return _elements[4]; } set { _elements[4] = value; } } + public double OffsetY { get { return _elements[5]; } set { _elements[5] = value; } } + + public double Perspective1 { get { return _elements[6]; } set { _elements[6] = value; } } + public double Perspective2 { get { return _elements[7]; } set { _elements[7] = value; } } + public double Perspective3 { get { return _elements[8]; } set { _elements[8] = value; } } + + public Matrix Clone() + { + var elements = new double[6]; + Array.Copy(_elements, elements, 9); + return new Matrix(elements); + } + + public void Translate(double offsetX, double offsetY) + { + OffsetX = offsetX; + OffsetY = OffsetY; + } + + public void Scale(double scaleX, double scaleY) + { + Scale(scaleX, scaleY, MatrixOrder.Append); + } + + public void Scale(double scaleX, double scaleY, MatrixOrder matrixOrder) + { + var scaleMatrix = new Matrix {M11 = scaleX, M22 = scaleY}; + var m1 = matrixOrder == MatrixOrder.Append + ? this + : scaleMatrix; + var m2 = matrixOrder == MatrixOrder.Append + ? scaleMatrix + : this; + + var m = Matrix.Multiply(m1, m2); + Array.Copy(m.Elements, _elements, 6); + + } + + private static Matrix Multiply(Matrix m1, Matrix m2) + { + throw new NotImplementedException(); + } + + public Point Transform(Point input) + { + return new Point + { + X = (int)Math.Round(input.X*M11 + input.Y*M12 + OffsetX, MidpointRounding.AwayFromZero), + Y = (int)Math.Round(input.X*M21 + input.Y*M22 + OffsetY, MidpointRounding.AwayFromZero) + }; + } + + public PointF Transform(PointF input) + { + return new PointF + { + X = (float)(input.X * M11 + input.Y * M12 + OffsetX), + Y = (float)(input.X * M21 + input.Y * M22 + OffsetY) + }; + } + + public PointD Transform(PointD input) + { + return new PointD + { + X = input.X * M11 + input.Y * M12 + OffsetX, + Y = input.X * M21 + input.Y * M22 + OffsetY + }; + } + void Transform(Point[] points) + { + for (var i = 0; i < points.Length; i++) + { + points[i] = Transform(points[i]); + } + } + } +} \ No newline at end of file diff --git a/SharpMap/Drawing/Point.cs b/SharpMap/Drawing/Point.cs new file mode 100644 index 00000000..a946f5b4 --- /dev/null +++ b/SharpMap/Drawing/Point.cs @@ -0,0 +1,31 @@ +using System.Drawing.Drawing2D; + +namespace SharpMap.Drawing +{ + public struct Point + { + public int X { get; set; } + public int Y { get; set; } + } + + public struct PointF + { + public PointF Empty { get { return new PointF();} } + public float X { get; set; } + public float Y { get; set; } + } + + public struct PointD + { + public double X { get; set; } + public double Y { get; set; } + + + } + + public enum MatrixOrder + { + Append, + Prepend + } +} \ No newline at end of file diff --git a/SharpMap/Geometries/GeoAPIEx.cs b/SharpMap/Geometries/GeoAPIEx.cs index 83f34321..b0bb4352 100644 --- a/SharpMap/Geometries/GeoAPIEx.cs +++ b/SharpMap/Geometries/GeoAPIEx.cs @@ -343,11 +343,11 @@ public static GraphicsPath TransformToImage(this IPolygon self, MapViewport map, if (useClipping) { res.AddPolygon(VectorRenderer.ClipPolygon( - self.ExteriorRing.TransformToImage(map), + VectorRenderer.LimitValues(self.ExteriorRing.TransformToImage(map), VectorRenderer.ExtremeValueLimit), map.Size.Width, map.Size.Height)); for (var i = 0; i < self.NumInteriorRings; i++) res.AddPolygon(VectorRenderer.ClipPolygon( - self.GetInteriorRingN(i).TransformToImage(map), + VectorRenderer.LimitValues(self.GetInteriorRingN(i).TransformToImage(map),VectorRenderer.ExtremeValueLimit), map.Size.Width, map.Size.Height)); } else diff --git a/SharpMap/Layers/Layer.cs b/SharpMap/Layers/Layer.cs index b8c087db..f0bc13df 100644 --- a/SharpMap/Layers/Layer.cs +++ b/SharpMap/Layers/Layer.cs @@ -61,7 +61,7 @@ public abstract partial class Layer : DisposableObject, ILayer protected virtual void OnSridChanged(EventArgs eventArgs) { _sourceFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); - + _coordinateTransform = _reverseCoordinateTransform = null; var handler = SRIDChanged; if (handler!= null) handler(this, eventArgs); } @@ -145,7 +145,16 @@ protected override void ReleaseManagedResources() /// public virtual ICoordinateTransformation CoordinateTransformation { - get { return _coordinateTransform; } + get + { + if (_coordinateTransform == null && NeedsTransformation) + { + var css = Session.Instance.CoordinateSystemServices; + _coordinateTransform = css.CreateTransformation( + css.GetCoordinateSystem(SRID), css.GetCoordinateSystem(TargetSRID)); + } + return _coordinateTransform; + } set { if (value == _coordinateTransform) @@ -196,10 +205,24 @@ protected virtual void OnCoordinateTransformationChanged(EventArgs e) /// public virtual ICoordinateTransformation ReverseCoordinateTransformation { - get { return _reverseCoordinateTransform; } + get + { + if (_reverseCoordinateTransform == null && NeedsTransformation) + { + var css = Session.Instance.CoordinateSystemServices; + _reverseCoordinateTransform = css.CreateTransformation( + css.GetCoordinateSystem(TargetSRID), css.GetCoordinateSystem(SRID)); + } + return _reverseCoordinateTransform; + } set { _reverseCoordinateTransform= value; } } + protected bool NeedsTransformation + { + get { return SRID != 0 && TargetSRID != 0 && SRID != TargetSRID; } + } + #region ILayer Members /// diff --git a/SharpMap/Rendering/Symbolizer/BasicLineSymbolizer.cs b/SharpMap/Rendering/Symbolizer/BasicLineSymbolizer.cs index 4419033a..5899f2b0 100644 --- a/SharpMap/Rendering/Symbolizer/BasicLineSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/BasicLineSymbolizer.cs @@ -28,7 +28,7 @@ public override object Clone() /// The graphics object protected override void OnRenderInternal(MapViewport map, ILineString lineString, Graphics graphics) { - graphics.DrawLines(Line, /*LimitValues(*/lineString.TransformToImage(map)/*)*/); + graphics.DrawLines(Line, VectorRenderer.LimitValues(lineString.TransformToImage(map), VectorRenderer.ExtremeValueLimit)); } } @@ -62,7 +62,7 @@ public override object Clone() /// The graphics object protected override void OnRenderInternal(MapViewport map, ILineString lineString, Graphics graphics) { - var pts = /*LimitValues(*/ VectorRenderer.OffsetRight(lineString.TransformToImage(map), Offset) /*)*/; + var pts = VectorRenderer.LimitValues(VectorRenderer.OffsetRight(lineString.TransformToImage(map), Offset), VectorRenderer.ExtremeValueLimit); graphics.DrawLines(Line, pts); } diff --git a/SharpMap/Rendering/Symbolizer/BasicPolygonSymbolizer.cs b/SharpMap/Rendering/Symbolizer/BasicPolygonSymbolizer.cs index 259a070f..d011d818 100644 --- a/SharpMap/Rendering/Symbolizer/BasicPolygonSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/BasicPolygonSymbolizer.cs @@ -143,7 +143,7 @@ public override object Clone() protected override void OnRenderInternal(MapViewport map, IPolygon polygon, Graphics g) { // convert points - var pts = /*LimitValues(*/polygon.TransformToImage(map)/*)*/; + var pts = /*VectorRenderer.LimitValues*(*/polygon.TransformToImage(map)/*, VectorRenderer.ExtremeValueLimit))*/; //// clip //if (UseClipping) diff --git a/SharpMap/Rendering/Symbolizer/CachedLineSymbolizer.cs b/SharpMap/Rendering/Symbolizer/CachedLineSymbolizer.cs index 71179465..cbab507a 100644 --- a/SharpMap/Rendering/Symbolizer/CachedLineSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/CachedLineSymbolizer.cs @@ -203,7 +203,7 @@ public List LineSymbolizeHandlers protected override void OnRenderInternal(MapViewport map, ILineString lineString, Graphics graphics) { var gp = new GraphicsPath(); - gp.AddLines(/*LimitValues(*/lineString.TransformToImage(map)/*)*/); + gp.AddLines(VectorRenderer.LimitValues(lineString.TransformToImage(map), VectorRenderer.ExtremeValueLimit)); if (ImmediateMode) { var tmp = new List(new[] {gp}); diff --git a/SharpMap/Rendering/Thematics/FontSizeTheme.cs b/SharpMap/Rendering/Thematics/FontSizeTheme.cs index a891a2f1..b782496d 100644 --- a/SharpMap/Rendering/Thematics/FontSizeTheme.cs +++ b/SharpMap/Rendering/Thematics/FontSizeTheme.cs @@ -128,7 +128,7 @@ protected virtual LabelStyle UpdateStyle(LabelStyle labelStyle, float newSize) var oldFont = labelStyle.Font; // Build a new font - labelStyle.Font = new Font(oldFont.FontFamily, newSize, oldFont.Style, GraphicsUnit.Pixel); + labelStyle.Font = new Font(oldFont.FontFamily, newSize, oldFont.Style, oldFont.Unit); // Dispose the old font if (oldFont != null) oldFont.Dispose(); diff --git a/SharpMap/Rendering/VectorRenderer.cs b/SharpMap/Rendering/VectorRenderer.cs index 093a5252..621b1876 100644 --- a/SharpMap/Rendering/VectorRenderer.cs +++ b/SharpMap/Rendering/VectorRenderer.cs @@ -144,7 +144,7 @@ public static void DrawLineString(Graphics g, ILineString line, Pen pen, MapView var gp = new GraphicsPath(); if (offset != 0d) points = OffsetRight(points, offset); - gp.AddLines(/*LimitValues(*/points/*, ExtremeValueLimit)*/); + gp.AddLines(LimitValues(points, ExtremeValueLimit)); g.DrawPath(pen, gp); } @@ -192,9 +192,9 @@ public static void DrawPolygon(Graphics g, IPolygon pol, Brush brush, Pen pen, b //Add the exterior polygon if (!clip) - gp.AddPolygon(/*LimitValues(*/points/*, ExtremeValueLimit)*/); + gp.AddPolygon(LimitValues(points, ExtremeValueLimit)); else - DrawPolygonClipped(gp, /*LimitValues(*/points/*, ExtremeValueLimit)*/, map.Size.Width, map.Size.Height); + DrawPolygonClipped(gp, LimitValues(points, ExtremeValueLimit), map.Size.Width, map.Size.Height); //Add the interior polygons (holes) if (pol.NumInteriorRings > 0) @@ -203,9 +203,9 @@ public static void DrawPolygon(Graphics g, IPolygon pol, Brush brush, Pen pen, b { points = ring.TransformToImage(map); if (!clip) - gp.AddPolygon(/*LimitValues(*/points/*, ExtremeValueLimit)*/); + gp.AddPolygon(LimitValues(points, ExtremeValueLimit)); else - DrawPolygonClipped(gp, /*LimitValues(*/points/*, ExtremeValueLimit)*/, map.Size.Width, + DrawPolygonClipped(gp, LimitValues(points, ExtremeValueLimit), map.Size.Width, map.Size.Height); } } @@ -246,7 +246,7 @@ private static void DrawPolygonClipped(GraphicsPath gp, PointF[] polygon, int wi /// The vertices that need to be limited /// The limit at which coordinate values will be cutoff /// The limited vertices - private static PointF[] LimitValues(PointF[] vertices, float limit) + public static PointF[] LimitValues(PointF[] vertices, float limit) { for (var i = 0; i < vertices.Length; i++) { diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index c736be30..1527ffc9 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -110,6 +110,8 @@ + + diff --git a/SharpMap/Web/WebUtilities.cs b/SharpMap/Web/WebUtilities.cs index 9d760706..a735d236 100644 --- a/SharpMap/Web/WebUtilities.cs +++ b/SharpMap/Web/WebUtilities.cs @@ -28,6 +28,8 @@ private static void TestSystemWeb() lock (LockContext) { + if (_systemWebTested) return; + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { if (assembly.GetName().Name != "System.Web") continue; @@ -67,9 +69,9 @@ private static void TestSystemWeb() { } } + _systemWebTested = true; } - _systemWebTested = true; } private static object GetCurrentHttpContext() diff --git a/UnitTests/Data/Providers/NtsProviderTests.cs b/UnitTests/Data/Providers/NtsProviderTests.cs index c3f2c970..14a2153d 100644 --- a/UnitTests/Data/Providers/NtsProviderTests.cs +++ b/UnitTests/Data/Providers/NtsProviderTests.cs @@ -23,16 +23,19 @@ public void FeatureWithNullDataThrowsException() var row = ds.LoadDataRow(new object[]{1001, null, 1, 1}, LoadOption.OverwriteChanges); ds.EndLoadData(); + var dsp = new DataTablePoint(ds, "oid", "x", "y"); /* * act */ // Create provider - IProvider p = null; - Assert.DoesNotThrow(() => p = new NtsProvider(new DataTablePoint(ds, "oid", "x", "y"))); + NtsProvider p = null; + Assert.DoesNotThrow(() => p = new NtsProvider(dsp)); /* * assert */ + Assert.That(p.SRID, Is.EqualTo(dsp.SRID)); + Assert.That(p.Factory, Is.EqualTo(dsp.Factory)); Assert.That(p.GetFeatureCount(), Is.EqualTo(101)); } diff --git a/UnitTests/Properties/Settings.Designer.cs b/UnitTests/Properties/Settings.Designer.cs index 35849a75..2b0cb08e 100644 --- a/UnitTests/Properties/Settings.Designer.cs +++ b/UnitTests/Properties/Settings.Designer.cs @@ -45,8 +45,8 @@ public string SqlServer2008 { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Host=127.0.0.1;Port=5432;User Id=postgres;Password=1.Kennwort;database=postgis_sa" + - "mple")] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true")] public string PostGis { get { return ((string)(this["PostGis"])); @@ -55,6 +55,7 @@ public string PostGis { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] [global::System.Configuration.DefaultSettingValueAttribute("Data Source=:memory:")] public string SpatiaLite { get { diff --git a/UnitTests/Properties/Settings.settings b/UnitTests/Properties/Settings.settings index 4f5bc631..51871d03 100644 --- a/UnitTests/Properties/Settings.settings +++ b/UnitTests/Properties/Settings.settings @@ -17,10 +17,20 @@ </SerializableConnectionString> Data Source=;Initial Catalog=;Integrated Security=True - - Host=127.0.0.1;Port=5432;User Id=postgres;Password=1.Kennwort;database=postgis_sample + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true</ConnectionString> + <ProviderName /> +</SerializableConnectionString> + Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true - + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=:memory:</ConnectionString> + <ProviderName /> +</SerializableConnectionString> Data Source=:memory: diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 6487366f..9fe37c36 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -81,6 +81,10 @@ False C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll + + ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll + True + ..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll @@ -112,6 +116,10 @@ ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.Extended.dll True + + ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll + True + False ..\packages\NUnit.2.6.3\lib\nunit.framework.dll @@ -158,12 +166,6 @@ - - ..\packages\Npgsql.2.2.4.3\lib\net40\Mono.Security.dll - - - ..\packages\Npgsql.2.2.4.3\lib\net40\Npgsql.dll - diff --git a/UnitTests/app.config b/UnitTests/app.config index 2826641d..28a17e75 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -12,15 +12,13 @@ + + - - Host=127.0.0.1;Port=5432;User Id=postgres;Password=1.Kennwort;database=postgis_sample - - - Data Source=:memory: - Microsoft.ACE.OLEDB.15.0 diff --git a/UnitTests/packages.config b/UnitTests/packages.config index e8a6186c..348bf37e 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -8,7 +8,7 @@ - + From b1ffa12992ac4cc9cc6b0055da701f90b668632c Mon Sep 17 00:00:00 2001 From: FObermaier Date: Mon, 19 Dec 2016 08:32:27 +0100 Subject: [PATCH 005/186] Multiple fixes to WinFormSamples project --- Examples/WinFormSamples/Form2.Designer.cs | 3 +++ Examples/WinFormSamples/FormMapBox.cs | 2 +- Examples/WinFormSamples/SampleTool.cs | 4 +++- Examples/WinFormSamples/Samples/ShapefileSample.cs | 2 ++ Examples/WinFormSamples/app.config | 8 +++----- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Examples/WinFormSamples/Form2.Designer.cs b/Examples/WinFormSamples/Form2.Designer.cs index d8ac03ac..7a9210db 100644 --- a/Examples/WinFormSamples/Form2.Designer.cs +++ b/Examples/WinFormSamples/Form2.Designer.cs @@ -102,9 +102,11 @@ private void InitializeComponent() // this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.mapBox1.CustomTool = null; this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.mapBox1.FineZoomFactor = 10D; this.mapBox1.Location = new System.Drawing.Point(0, 0); + this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; this.mapBox1.Name = "mapBox1"; this.mapBox1.PreviewMode = SharpMap.Forms.MapBox.PreviewModes.Fast; this.mapBox1.QueryGrowFactor = 5F; @@ -114,6 +116,7 @@ private void InitializeComponent() this.mapBox1.ShowProgressUpdate = false; this.mapBox1.Size = new System.Drawing.Size(669, 503); this.mapBox1.TabIndex = 2; + this.mapBox1.TakeFocusOnHover = true; this.mapBox1.Text = "mapBox1"; this.mapBox1.WheelZoomMagnitude = 2D; // diff --git a/Examples/WinFormSamples/FormMapBox.cs b/Examples/WinFormSamples/FormMapBox.cs index c7704503..c3f337aa 100644 --- a/Examples/WinFormSamples/FormMapBox.cs +++ b/Examples/WinFormSamples/FormMapBox.cs @@ -123,7 +123,7 @@ private void btnTool_Click(object sender, EventArgs e) case "btnTool": tool = (mapBox1.CustomTool is SampleTool) ? null : new SampleTool(mapBox1); break; - case ("btnTool2"): + case "btnTool2": tool = (mapBox1.CustomTool is MagnifierTool) ? null : new MagnifierTool(mapBox1); break; } diff --git a/Examples/WinFormSamples/SampleTool.cs b/Examples/WinFormSamples/SampleTool.cs index ce125891..9d602356 100644 --- a/Examples/WinFormSamples/SampleTool.cs +++ b/Examples/WinFormSamples/SampleTool.cs @@ -75,7 +75,9 @@ protected override void OnEnabledChanged(EventArgs e) { base.OnEnabledChanged(e); if (!Enabled) - _toolTip.RemoveAll(); + { + if (_toolTip != null) _toolTip.RemoveAll(); + } } private CancellationTokenSource _cts = new CancellationTokenSource(); diff --git a/Examples/WinFormSamples/Samples/ShapefileSample.cs b/Examples/WinFormSamples/Samples/ShapefileSample.cs index 09f4be55..117e81ab 100644 --- a/Examples/WinFormSamples/Samples/ShapefileSample.cs +++ b/Examples/WinFormSamples/Samples/ShapefileSample.cs @@ -3,6 +3,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Text; using SharpMap; +using SharpMap.Data; using SharpMap.Data.Providers; using SharpMap.Layers; using SharpMap.Rendering; @@ -216,6 +217,7 @@ private static Map InitializeMapOrig(float angle) layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; layLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; layLabel.Style.CollisionDetection = true; + layLabel.LabelPositionDelegate = fdr => fdr.Geometry.InteriorPoint.Coordinate; layLabel.PriorityColumn = "POPDENS"; //Set up a city label layer diff --git a/Examples/WinFormSamples/app.config b/Examples/WinFormSamples/app.config index 7bf89445..aa1a86e1 100644 --- a/Examples/WinFormSamples/app.config +++ b/Examples/WinFormSamples/app.config @@ -4,15 +4,13 @@
- +
- - + + From 19308002141eb56df79a3d7f3336cc077ca5657c Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 15 Feb 2017 17:23:27 +0100 Subject: [PATCH 006/186] Fix for #50 --- SharpMap/Rendering/Symbolizer/CharacterPointSymbolizer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SharpMap/Rendering/Symbolizer/CharacterPointSymbolizer.cs b/SharpMap/Rendering/Symbolizer/CharacterPointSymbolizer.cs index e64c1c3a..7c5a8de5 100644 --- a/SharpMap/Rendering/Symbolizer/CharacterPointSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/CharacterPointSymbolizer.cs @@ -199,9 +199,10 @@ internal override void OnRenderInternal(PointF pt, Graphics g) { //need to look it up using (var path = new GraphicsPath(FillMode.Winding)) + using (var haloPen = new Pen(HaloBrush, 2 * Halo) { MiterLimit = 1.0f }) { - path.AddString(_text, Font.FontFamily, (int) Font.Style, Font.Size, pt, StringFormat); - g.DrawPath(new Pen(HaloBrush, 2*Halo), path); + path.AddString(_text, Font.FontFamily, (int)Font.Style, Font.Size, pt, StringFormat); + g.DrawPath(haloPen, path); g.FillPath(Foreground, path); } } From a5c34b9e480a68546212022f925ee51bdcb722a2 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 15 Feb 2017 17:27:42 +0100 Subject: [PATCH 007/186] Update ProjNet package --- Examples/DemoWebSite/Web.Config | 94 +++++++++---------- Examples/DemoWebSite/packages.config | 2 +- Examples/DemoWinForm/DemoWinForm.csproj | 4 + Examples/DemoWinForm/Program.cs | 16 ++++ Examples/DemoWinForm/packages.config | 1 + .../ExampleCodeSnippets.csproj | 4 +- Examples/ExampleCodeSnippets/app.config | 2 +- Examples/ExampleCodeSnippets/packages.config | 2 +- .../SharpMap.Demo.Wms.csproj | 4 +- Examples/SharpMap.Demo.Wms/Web.config | 58 ++++++------ Examples/SharpMap.Demo.Wms/packages.config | 2 +- Examples/WPFSamples/WPFSamples.csproj | 4 +- Examples/WPFSamples/packages.config | 2 +- Examples/WinFormSamples/Program.cs | 7 +- .../WinFormSamples/Samples/ShapefileSample.cs | 28 ++++++ Examples/WinFormSamples/WinFormSamples.csproj | 4 +- Examples/WinFormSamples/packages.config | 2 +- ...arpMap.CoordinateSystems.DotSpatial.csproj | 6 -- ....Data.Providers.FileGdb.csproj.DotSettings | 3 + .../SharpMap.Data.Providers.Kml.csproj | 4 +- SharpMap.Data.Providers.Kml/packages.config | 2 +- .../SharpMap.Extensions.csproj | 4 +- SharpMap.Extensions/app.config | 30 +++--- SharpMap.Extensions/packages.config | 2 +- SharpMap.UI/SharpMap.UI.csproj | 4 +- SharpMap.UI/packages.config | 2 +- SharpMap.sln | 26 ----- SharpMap/Layers/VectorLayer.cs | 3 +- UnitTests/UnitTests.csproj | 4 +- UnitTests/app.config | 9 +- UnitTests/packages.config | 2 +- 31 files changed, 174 insertions(+), 163 deletions(-) create mode 100644 SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj.DotSettings diff --git a/Examples/DemoWebSite/Web.Config b/Examples/DemoWebSite/Web.Config index e45cfaa3..ae8b1cdb 100644 --- a/Examples/DemoWebSite/Web.Config +++ b/Examples/DemoWebSite/Web.Config @@ -1,4 +1,4 @@ - + @@ -16,33 +16,33 @@ - - - - - - + + + + + + - - - - - + + + + + - - + + - + - + - - + + - - + + - - - + + + - + - - + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/Examples/DemoWebSite/packages.config b/Examples/DemoWebSite/packages.config index fe953f8f..cce97813 100644 --- a/Examples/DemoWebSite/packages.config +++ b/Examples/DemoWebSite/packages.config @@ -6,5 +6,5 @@ - + \ No newline at end of file diff --git a/Examples/DemoWinForm/DemoWinForm.csproj b/Examples/DemoWinForm/DemoWinForm.csproj index 40d1f6dd..511fcc1d 100644 --- a/Examples/DemoWinForm/DemoWinForm.csproj +++ b/Examples/DemoWinForm/DemoWinForm.csproj @@ -75,6 +75,10 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True + + ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + True + diff --git a/Examples/DemoWinForm/Program.cs b/Examples/DemoWinForm/Program.cs index ba05e379..a6c2a4bc 100644 --- a/Examples/DemoWinForm/Program.cs +++ b/Examples/DemoWinForm/Program.cs @@ -16,7 +16,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA using System; +using System.Text; using System.Windows.Forms; +using NetTopologySuite; +using ProjNet.CoordinateSystems; +using ProjNet.CoordinateSystems.Transformations; namespace DemoWinForm { @@ -28,6 +32,18 @@ internal static class Program [STAThread] private static void Main() { + var gss = new NtsGeometryServices(); + var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( + new CoordinateSystemFactory(), + new CoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + + GeoAPI.GeometryServiceProvider.Instance = gss; + SharpMap.Session.Instance + .SetGeometryServices(gss) + .SetCoordinateSystemServices(css) + .SetCoordinateSystemRepository(css); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); diff --git a/Examples/DemoWinForm/packages.config b/Examples/DemoWinForm/packages.config index cb31f51e..dd9dd726 100644 --- a/Examples/DemoWinForm/packages.config +++ b/Examples/DemoWinForm/packages.config @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj index 21cfe2e3..24bed397 100644 --- a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj +++ b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj @@ -88,8 +88,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll True diff --git a/Examples/ExampleCodeSnippets/app.config b/Examples/ExampleCodeSnippets/app.config index 78f95abb..6638ccf6 100644 --- a/Examples/ExampleCodeSnippets/app.config +++ b/Examples/ExampleCodeSnippets/app.config @@ -1,7 +1,7 @@  - +
diff --git a/Examples/ExampleCodeSnippets/packages.config b/Examples/ExampleCodeSnippets/packages.config index f0297446..371e6974 100644 --- a/Examples/ExampleCodeSnippets/packages.config +++ b/Examples/ExampleCodeSnippets/packages.config @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj index 84bc16fc..6e47db0b 100644 --- a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj +++ b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj @@ -65,8 +65,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-Client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll True diff --git a/Examples/SharpMap.Demo.Wms/Web.config b/Examples/SharpMap.Demo.Wms/Web.config index be0fd79b..df67d70a 100644 --- a/Examples/SharpMap.Demo.Wms/Web.config +++ b/Examples/SharpMap.Demo.Wms/Web.config @@ -1,62 +1,62 @@ - + - + - - + + - - - - + + + + - - - - - - + + + + + + - + - + - - + + - - - + + + - - + + - - + + - - + + - - + + diff --git a/Examples/SharpMap.Demo.Wms/packages.config b/Examples/SharpMap.Demo.Wms/packages.config index e17b6cef..ed3d4dc2 100644 --- a/Examples/SharpMap.Demo.Wms/packages.config +++ b/Examples/SharpMap.Demo.Wms/packages.config @@ -7,6 +7,6 @@ - + \ No newline at end of file diff --git a/Examples/WPFSamples/WPFSamples.csproj b/Examples/WPFSamples/WPFSamples.csproj index ca1c5d48..9393b344 100644 --- a/Examples/WPFSamples/WPFSamples.csproj +++ b/Examples/WPFSamples/WPFSamples.csproj @@ -44,8 +44,8 @@ ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll True diff --git a/Examples/WPFSamples/packages.config b/Examples/WPFSamples/packages.config index b86b1c89..938fa645 100644 --- a/Examples/WPFSamples/packages.config +++ b/Examples/WPFSamples/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Examples/WinFormSamples/Program.cs b/Examples/WinFormSamples/Program.cs index f4f1d2b1..672e93ed 100644 --- a/Examples/WinFormSamples/Program.cs +++ b/Examples/WinFormSamples/Program.cs @@ -1,14 +1,9 @@ using System; -using System.Collections.Generic; using System.Windows.Forms; -using System.Threading; -using System.Net; using System.Text; using NetTopologySuite; -using ProjNet; using ProjNet.CoordinateSystems; using ProjNet.CoordinateSystems.Transformations; -using SharpMap.CoordinateSystems; namespace WinFormSamples { @@ -22,7 +17,7 @@ private static void Main() { var gss = new NtsGeometryServices(); var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( - new CoordinateSystemFactory(Encoding.ASCII), + new CoordinateSystemFactory(), new CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); diff --git a/Examples/WinFormSamples/Samples/ShapefileSample.cs b/Examples/WinFormSamples/Samples/ShapefileSample.cs index 117e81ab..6f77700c 100644 --- a/Examples/WinFormSamples/Samples/ShapefileSample.cs +++ b/Examples/WinFormSamples/Samples/ShapefileSample.cs @@ -259,6 +259,33 @@ private static Map InitializeMapOrig(float angle) Font = new Font(GenericFontFamilies.SansSerif.ToString(), 16f, FontStyle.Bold) }); + bool ignoreLength = false; + + var layRiverLabel = new LabelLayer("River labels") + { + DataSource = layRivers.DataSource, + Enabled = true, + LabelColumn = "Name", + TextRenderingHint = TextRenderingHint.AntiAlias, + SmoothingMode = SmoothingMode.AntiAlias, + SRID = 4326, + LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, + MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.CommonCenter, + Style = + new LabelStyle + { + ForeColor = Color.DarkBlue, + Font = new Font(FontFamily.GenericSansSerif, 11), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, + //CollisionDetection = true, + Halo = new Pen(Color.Azure, 2), + IgnoreLength = ignoreLength, + Offset = new PointF(0, -10) + + }, + }; + //Add the layers to the map object. //The order we add them in are the order they are drawn, so we add the rivers last to put them on top //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries)); @@ -267,6 +294,7 @@ private static Map InitializeMapOrig(float angle) map.Layers.Add(layCities); map.Layers.Add(layLabel); map.Layers.Add(layCityLabel); + map.Layers.Add(layRiverLabel); //limit the zoom to 360 degrees width diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index 7836c0ec..a1349af6 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -137,8 +137,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll True diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index 10f7fdfe..450df87e 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj index e0e0ed2b..7ce2ace9 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj +++ b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj @@ -56,12 +56,6 @@ - - - {c83777fc-aabb-47d9-911f-d76255d4d541} - SharpMap - - - \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings b/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings deleted file mode 100644 index c9927152..00000000 --- a/SharpMap.Data.Providers.IVV/SharpMap.Data.Providers.IVV.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs b/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs deleted file mode 100644 index cbd51301..00000000 --- a/SharpMap.Data.Providers.IVV/Test/V3DemandProviderTests.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.Collections.ObjectModel; -using System.Data; -using System.IO; -using GeoAPI.Geometries; -using NUnit.Framework; -using SharpMap.Data; -using SharpMap.Data.Providers; -using SharpMap.Data.Providers.Venus3; - -namespace SharpMap.Test -{ - public class V3DemandProviderTests - { - private static string GetConnectionString(string mdb) - { - return string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=False;", mdb); - } - - [TestCase(@"D:\VenusDaten\V3\DFN\A0\DFN2950.mdb", V3DemandGeometry.Centroid)] - [TestCase(@"D:\VenusDaten\V3\DFN\A0\DFN2950.mdb", V3DemandGeometry.Area)] - [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb", V3DemandGeometry.Area)] - [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb", V3DemandGeometry.Centroid)] - [TestCase(@"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb", V3DemandGeometry.Area)] - [TestCase(@"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb", V3DemandGeometry.Centroid)] - // @"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb" - public void TestAccess(string mdb, V3DemandGeometry v3geom) - { - V3DemandProvider v3p = null; - Assert.DoesNotThrow( () => v3p = new V3DemandProviderAccess(0, GetConnectionString(mdb))); - v3p.Geometry = v3geom; - - // num features - Assert.Greater(v3p.GetFeatureCount(), 0, "v3p.GetFeatureCount() > 0"); - - // extent - Envelope extent = null; - Assert.DoesNotThrow(() => extent = v3p.GetExtents(), "exception"); - Assert.IsNotNull(extent, "extent != null"); - Assert.IsFalse(extent.IsNull, "extent.IsNull"); - - - // object Id - Collection ids = null; - Assert.DoesNotThrow(() => ids = v3p.GetObjectIDsInView(extent)); - Assert.IsNotNull(ids, "ids != null"); - Assert.Greater(ids.Count, 0, "ids.Count > 0"); - - // geometries - Collection geometries = null; - Assert.DoesNotThrow(() => geometries = v3p.GetGeometriesInView(extent)); - Assert.IsNotNull(geometries, "geometries != null"); - Assert.Greater(geometries.Count, 0, "geometries.Count > 0"); - - var rnd = new Random(); - // geometry single access - for (var i = 0; i < 5; i++) - { - IGeometry fdr = null; - Assert.DoesNotThrow(() => fdr = v3p.GetGeometryByID(ids[rnd.Next(0, ids.Count - 1)])); - Assert.IsNotNull(fdr, "fdr != null"); - //Assert.IsFalse(fdr.IsFeatureGeometryNull()); - } - - // features - for (var i = 0; i < 5; i++) - { - FeatureDataRow fdr = null; - Assert.DoesNotThrow(() => fdr = v3p.GetFeature(ids[rnd.Next(0, ids.Count - 1)])); - Assert.IsNotNull(fdr, "fdr != null"); - Assert.IsFalse(fdr.IsFeatureGeometryNull()); - } - - var fds = new FeatureDataSet(); - Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(extent, fds)); - Assert.IsTrue(fds.Tables.Count == 1); - Assert.IsTrue(fds.Tables[0].Rows.Count == v3p.GetFeatureCount()); - - var ext2 = new Envelope(extent); - ext2.ExpandBy(-0.3*extent.Width); - Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(ext2, fds)); - Assert.IsTrue(fds.Tables.Count == 2); - Assert.IsTrue(fds.Tables[1].Rows.Count < fds.Tables[0].Rows.Count); - - v3p.Include("EINW"); - v3p.Include("ERW"); - v3p.Include("SCHST"); - Assert.DoesNotThrow(() => v3p.ExecuteIntersectionQuery(ext2, fds)); - Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_EINW") > -1); - Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_ERW") > -1); - Assert.IsTrue(fds.Tables[2].Columns.IndexOf("_SCHST") > -1); - //Assert.IsTrue(fds.Tables.Count == 3); - //Assert.IsTrue(fds.Tables[0].Rows.Count < fds.Tables[1].Rows.Count); - - } - - [TestCase(@"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM_a0.zgs", - @"D:\Projekte\BAM3473\Modell\Zellen_V2_2\BAM3473.mdb")] - [TestCase(@"D:\Projekte\BAM3473\Modell\D_2015_160106\BAM_a0.zgs", - @"D:\Projekte\BAM3473\Modell\Nachfrage\A0\BAM3473.mdb")] - [Ignore("Run explicitly")] - public void AddGeometries(string v2file, string v3file) - { - var v2zkk = Path.ChangeExtension(v2file, "zkk"); - var v2zpz = Path.ChangeExtension(v2file, "zpz"); - var zkk = xKKProvider.Load(v2zkk); - var zpz = ZPZProvider.Load(v2zpz, zkk); - - var v3a = new V3DemandProviderAccess(31466, GetConnectionString(v3file)); - v3a.Geometry = V3DemandGeometry.Area; - - var count = zpz.GetFeatureCount(); - for (var i = 0; i < count; i++) - { - var id = (uint) i + 1; - var itm = zpz.GetGeometryByID(id); - if (itm != null && !itm.IsEmpty) - v3a.SetGeometryByID(id, itm); - if (i%10 == 0) Console.Write("."); - } - Console.WriteLine(); - } - } -} \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Test/xKKTests.cs b/SharpMap.Data.Providers.IVV/Test/xKKTests.cs deleted file mode 100644 index aef330c5..00000000 --- a/SharpMap.Data.Providers.IVV/Test/xKKTests.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using NUnit.Framework; -using SharpMap.Data.Providers; -using SharpMap.Layers; -using SharpMap.Rendering; -using SharpMap.Rendering.Thematics; -using SharpMap.Styles; - -#if DEBUG - -namespace SharpMap.Test -{ - public class xKKTests - { - [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zkk")] - public void TestxKK(string filename) - { - xKKProvider p = null; - - Assert.DoesNotThrow(() => p = xKKProvider.Load(filename)); - Assert.That(p != null, "p != null"); - Assert.That(p.ConnectionID == filename); - - var m = new Map(); - m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p) - { Style = new VectorStyle{PointSize = 2f}}); - - m.ZoomToExtents(); - using (var img = m.GetMap()) - { img.Save(System.IO.Path.ChangeExtension(filename, "png"));} - } - - [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zpz")] - public void TestZPZ(string filename) - { - xKKProvider p = null; - - Assert.DoesNotThrow(() => p = xKKProvider.Load(System.IO.Path.ChangeExtension(filename, "zkk"))); - Assert.That(p != null, "p != null"); - - ZPZProvider p2 = null; - Assert.DoesNotThrow(() => p2 = ZPZProvider.Load(filename, p)); - Assert.That(p != null, "p2 != null"); - - var m = new Map(); - m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p2) { Style = new VectorStyle - { - Fill = new SolidBrush(Color.Lavender), - Outline = Pens.DodgerBlue, EnableOutline = true - } }); - - m.ZoomToExtents(); - using (var img = m.GetMap()) - { img.Save(System.IO.Path.ChangeExtension(filename, "png")); } - } - - - [TestCase(@"D:\temp\BAM\P_2025_151217\BAM_p0.zgs")] - public void TestZGS(string filename) - { - xKKProvider p = null; - - Assert.DoesNotThrow(() => p = xKKProvider.Load(System.IO.Path.ChangeExtension(filename, "zkk"))); - Assert.That(p != null, "p != null"); - //Assert.That(p.ConnectionID == filename); - - xxSProvider p2 = null; - Assert.DoesNotThrow(() => p2 = xxSProvider.Load(filename, ZGS.Create, p)); - Assert.That(p2 != null, "p != null"); - - - var m = new Map(); - var styles = new Dictionary(); - styles.Add(1, new VectorStyle{Line = Pens.Gainsboro }); - styles.Add(2, new VectorStyle{Line = Pens.Gainsboro }); - styles.Add(3, new VectorStyle{Line = Pens.DarkGray}); - styles.Add(4, new VectorStyle{Line = Pens.Black }); - styles.Add(5, new VectorStyle{Line = new Pen(Color.Green, 2)}); - styles.Add(6, new VectorStyle{Line = new Pen(Color.OrangeRed, 3) }); - styles.Add(7, new VectorStyle{Line = new Pen(Color.Blue, 4) {EndCap = LineCap.Round, StartCap = LineCap.Round}}); - m.Layers.Add(new VectorLayer(System.IO.Path.GetFileName(filename), p2) - { - Theme = new UniqueValuesTheme("ART",styles, new VectorStyle { Line = new Pen(Color.Aqua, 1) { DashStyle = DashStyle.Dot}}) - }); - - m.ZoomToExtents(); - using (var img = m.GetMap()) - { img.Save(System.IO.Path.ChangeExtension(filename, "png")); } - } - } -} - -#endif \ No newline at end of file diff --git a/SharpMap.Data.Providers.IVV/Utilities/Class1.cs b/SharpMap.Data.Providers.IVV/Utilities/Class1.cs deleted file mode 100644 index 7067d82e..00000000 --- a/SharpMap.Data.Providers.IVV/Utilities/Class1.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace SharpMap.Utilities -{ - internal class Utilities - { - public static string ReadVersion(BinaryReader reader) - { - var bytes = reader.ReadBytes(6); - return Win1252.Value.GetString(bytes); - } - - public static Lazy Win1252 { get { return new Lazy( () => Encoding.Default);} } - } -} diff --git a/SharpMap.Data.Providers.IVV/packages.config b/SharpMap.Data.Providers.IVV/packages.config deleted file mode 100644 index eb4485fc..00000000 --- a/SharpMap.Data.Providers.IVV/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 4eaf7c7e66e665dc0e8c753de38c075b63959de8 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Thu, 16 Feb 2017 16:47:37 +0100 Subject: [PATCH 009/186] Sometimes raster layer did not draw --- SharpMap.Extensions/Layers/GeoTransform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharpMap.Extensions/Layers/GeoTransform.cs b/SharpMap.Extensions/Layers/GeoTransform.cs index a264ae89..0c34da34 100644 --- a/SharpMap.Extensions/Layers/GeoTransform.cs +++ b/SharpMap.Extensions/Layers/GeoTransform.cs @@ -31,7 +31,7 @@ namespace SharpMap.Layers [Serializable] internal class GeoTransform { - private const double Epsilon = 1e-12; + private const double Epsilon = double.Epsilon; private readonly double[] _inverseTransform = new double[6]; private readonly double[] _transform = new double[6]; From 5d24e907c537ee582ff84424dad42fa526a33dee Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 17 Mar 2017 17:40:05 +0100 Subject: [PATCH 010/186] fix for SharpMapHost did not compile --- SharpMap.UI.WPF/SharpMapHost.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SharpMap.UI.WPF/SharpMapHost.cs b/SharpMap.UI.WPF/SharpMapHost.cs index ff956d29..08d04dd0 100644 --- a/SharpMap.UI.WPF/SharpMapHost.cs +++ b/SharpMap.UI.WPF/SharpMapHost.cs @@ -410,8 +410,8 @@ private void OnMapLayerChanged(object sender, NotifyCollectionChangedEventArgs e foreach (var layer in layers) { var castedLayer = layer as ILayer; - if (castedLayer != null && MapBox.Map.Layers.All(l => l.LayerName != castedLayer.LayerName)) - MapBox.Map.Layers.Add(castedLayer); + if (castedLayer != null && _mapBox.Map.Layers.All(l => l.LayerName != castedLayer.LayerName)) + _mapBox.Map.Layers.Add(castedLayer); } } } @@ -425,8 +425,8 @@ private void OnMapLayerChanged(object sender, NotifyCollectionChangedEventArgs e foreach (var layer in layers) { var castedLayer = layer as ILayer; - if (castedLayer != null && MapBox.Map.Layers.Any(l => l.LayerName == castedLayer.LayerName)) - MapBox.Map.Layers.Remove(castedLayer); + if (castedLayer != null && _mapBox.Map.Layers.Any(l => l.LayerName == castedLayer.LayerName)) + _mapBox.Map.Layers.Remove(castedLayer); } } } From 7aecee8247496ee76a90f4d2c428e1805a7a2d67 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 17 Mar 2017 17:47:43 +0100 Subject: [PATCH 011/186] Some tests did not compile --- Examples/ExampleCodeSnippets/ExampleCodeSession.cs | 2 +- UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs | 2 +- UnitTests/UnitTestsFixture.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Examples/ExampleCodeSnippets/ExampleCodeSession.cs b/Examples/ExampleCodeSnippets/ExampleCodeSession.cs index 9bab7367..a83045d6 100644 --- a/Examples/ExampleCodeSnippets/ExampleCodeSession.cs +++ b/Examples/ExampleCodeSnippets/ExampleCodeSession.cs @@ -8,7 +8,7 @@ public void SetUp() { var gss = new NetTopologySuite.NtsGeometryServices(); var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( - new ProjNet.CoordinateSystems.CoordinateSystemFactory(System.Text.Encoding.ASCII), + new ProjNet.CoordinateSystems.CoordinateSystemFactory(), new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); diff --git a/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs b/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs index 203b6ce2..69a15218 100644 --- a/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs +++ b/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs @@ -23,7 +23,7 @@ public void FixtureSetUp() { var gss = new NtsGeometryServices(); var css = new CoordinateSystemServices( - new CoordinateSystemFactory(Encoding.ASCII), + new CoordinateSystemFactory(), new CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); diff --git a/UnitTests/UnitTestsFixture.cs b/UnitTests/UnitTestsFixture.cs index 27e8adb5..38815505 100644 --- a/UnitTests/UnitTestsFixture.cs +++ b/UnitTests/UnitTestsFixture.cs @@ -10,7 +10,7 @@ public void RunBeforeAnyTests() { var gss = new NetTopologySuite.NtsGeometryServices(); var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( - new ProjNet.CoordinateSystems.CoordinateSystemFactory(System.Text.Encoding.ASCII), + new ProjNet.CoordinateSystems.CoordinateSystemFactory(), new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); From 5ee2d7789b7b70008dd07b3cb308a3390bee3dc3 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 17 Mar 2017 17:48:49 +0100 Subject: [PATCH 012/186] wpf sample did not compile --- Examples/WPFSamples/MainWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/WPFSamples/MainWindow.xaml.cs b/Examples/WPFSamples/MainWindow.xaml.cs index 2acd1431..f0ba6fca 100644 --- a/Examples/WPFSamples/MainWindow.xaml.cs +++ b/Examples/WPFSamples/MainWindow.xaml.cs @@ -19,7 +19,7 @@ public MainWindow() var gss = GeoAPI.GeometryServiceProvider.Instance; var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( - new ProjNet.CoordinateSystems.CoordinateSystemFactory(System.Text.Encoding.ASCII), + new ProjNet.CoordinateSystems.CoordinateSystemFactory(), new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); From e9043327d1d09e6e26c22397275287a20aab26c5 Mon Sep 17 00:00:00 2001 From: OS Developer Date: Mon, 24 Apr 2017 10:28:26 +0200 Subject: [PATCH 013/186] Added support for LayerTitle property to WMS Layers so it can be different to LayerName --- SharpMap.Web/Web/Wms/ServerCapabilities.cs | 4 ++-- SharpMap/Layers/AsyncLayerProxyLayer.cs | 8 +++++++- SharpMap/Layers/GdiImageLayerProxy.cs | 8 +++++++- SharpMap/Layers/ILayer.cs | 7 ++++++- SharpMap/Layers/Layer.cs | 10 ++++++++++ 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/SharpMap.Web/Web/Wms/ServerCapabilities.cs b/SharpMap.Web/Web/Wms/ServerCapabilities.cs index a0dfd1d0..aef510dc 100644 --- a/SharpMap.Web/Web/Wms/ServerCapabilities.cs +++ b/SharpMap.Web/Web/Wms/ServerCapabilities.cs @@ -301,7 +301,7 @@ private static XmlNode GetWmsLayerNode(ILayer layer, XmlDocument doc) { XmlNode LayerNode = doc.CreateNode(XmlNodeType.Element, "Layer", wmsNamespaceURI); LayerNode.AppendChild(CreateElement("Name", layer.LayerName, doc, false, wmsNamespaceURI)); - LayerNode.AppendChild(CreateElement("Title", layer.LayerName, doc, false, wmsNamespaceURI)); + LayerNode.AppendChild(CreateElement("Title", layer.LayerTitle ?? layer.LayerName, doc, false, wmsNamespaceURI)); //if this is a vector layer with themes property set, add the Styles if (layer.GetType() == typeof(VectorLayer)) if ((layer as VectorLayer).Themes != null) @@ -587,4 +587,4 @@ private static void ValidationError(object sender, ValidationEventArgs arguments //#endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/AsyncLayerProxyLayer.cs b/SharpMap/Layers/AsyncLayerProxyLayer.cs index b1e57d07..4dbace21 100644 --- a/SharpMap/Layers/AsyncLayerProxyLayer.cs +++ b/SharpMap/Layers/AsyncLayerProxyLayer.cs @@ -124,6 +124,12 @@ bool ILayer.Enabled set { _baseLayer.Enabled = value; } } + public string LayerTitle + { + get { return _baseLayer.LayerTitle; } + set { _baseLayer.LayerTitle = value; } + } + /// /// Name of layer /// @@ -411,4 +417,4 @@ private void OnDeserialized(StreamingContext context) _lastViewport = new Envelope(); } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/GdiImageLayerProxy.cs b/SharpMap/Layers/GdiImageLayerProxy.cs index 3c219c1b..a82cdb7d 100644 --- a/SharpMap/Layers/GdiImageLayerProxy.cs +++ b/SharpMap/Layers/GdiImageLayerProxy.cs @@ -130,6 +130,12 @@ bool ILayer.Enabled set { _baseLayer.Enabled = value; } } + public string LayerTitle + { + get { return _baseLayer.LayerTitle; } + set { _baseLayer.LayerTitle = value; } + } + string ILayer.LayerName { get { return _baseLayer.LayerName; } @@ -241,4 +247,4 @@ bool ICanQueryLayer.IsQueryEnabled } } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/ILayer.cs b/SharpMap/Layers/ILayer.cs index e5ffd029..aae01d13 100644 --- a/SharpMap/Layers/ILayer.cs +++ b/SharpMap/Layers/ILayer.cs @@ -51,6 +51,11 @@ public interface ILayer ///
string LayerName { get; set; } + /// + /// Optional title of layer. It will be used for services like WMS where both Name and Title are supported. + /// + string LayerTitle { get; set; } + /// /// Gets the boundingbox of the entire layer /// @@ -154,4 +159,4 @@ public static bool DoRender(this Styles.IStyle self, Graphics g, Map map) } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/Layer.cs b/SharpMap/Layers/Layer.cs index f0bc13df..dc836541 100644 --- a/SharpMap/Layers/Layer.cs +++ b/SharpMap/Layers/Layer.cs @@ -104,6 +104,7 @@ protected virtual void OnLayerNameChanged(EventArgs eventArgs) private IGeometryFactory _targetFactory; private string _layerName; + private string _layerTitle; private IStyle _style; private int _srid = -1; private int? _targetSrid; @@ -234,6 +235,15 @@ public string LayerName set { _layerName = value; } } + /// + /// Gets or sets the title of the layer + /// + public string LayerTitle + { + get { return _layerTitle; } + set { _layerTitle = value; } + } + /// /// The spatial reference ID (CRS) /// From 8f6ceff216cf781df3c286dd9df6c0ec120522f3 Mon Sep 17 00:00:00 2001 From: OS Developer Date: Mon, 24 Apr 2017 11:43:56 +0200 Subject: [PATCH 014/186] Added .editorconfig file to apply correct indent settings (4 spaces). This is required for VS to use solution specific configuration. --- .editorconfig | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..869739dc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = crlf +insert_final_newline = true \ No newline at end of file From a653b937e9ee6014aec999addbae24196b9df461 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Thu, 11 May 2017 10:52:13 +0200 Subject: [PATCH 015/186] Fixing / adding *.nuspec files Adjusting projects to meet nuspec requirements --- .gitignore | 7 +++- .../SharpMap.Converters.GeoJSON.csproj | 1 + .../SharpMap.Converters.Spatialite.csproj | 1 + SharpMap.Converters.nuspec | 35 ++++++++++++++++ SharpMap.CoordinateSystems.DotSpatial.nuspec | 33 +++++++++++++++ ...arpMap.CoordinateSystems.DotSpatial.csproj | 1 + SharpMap.CoordinateSystems.ProjNet.nuspec | 31 ++++++++++++++ SharpMap.Core.nuspec | 19 +++++---- SharpMap.Data.Providers.GeoPackage.nuspec | 8 ++-- SharpMap.Data.Providers.Kml.nuspec | 8 ++-- SharpMap.Data.Providers.OracleSpatial.nuspec | 6 +-- SharpMap.Extensions.nuspec | 13 +++--- SharpMap.Layers.BruTile.nuspec | 17 ++++---- .../SharpMap.Layers.BruTile.csproj | 1 + SharpMap.Layers.HeatLayer.nuspec | 17 +++++--- SharpMap.UI.nuspec | 8 ++-- SharpMap.Utilities.Indexing.SbnTree.nuspec | 30 ++++++++++++++ ...SharpMap.Utilities.Indexing.SbnTree.csproj | 2 +- SharpMap.Web.nuspec | 6 +-- SharpMap.nuspec | 12 +++--- SharpMap.proj | 40 ++++++++++--------- 21 files changed, 220 insertions(+), 76 deletions(-) create mode 100644 SharpMap.Converters.nuspec create mode 100644 SharpMap.CoordinateSystems.DotSpatial.nuspec create mode 100644 SharpMap.CoordinateSystems.ProjNet.nuspec create mode 100644 SharpMap.Utilities.Indexing.SbnTree.nuspec diff --git a/.gitignore b/.gitignore index 8d774751..01cf4e89 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ bld/ # Visual Studo 2015 cache/options directory .vs/ +# Visual Studo 2015 cache/options directory +.idea/ + # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* @@ -195,5 +198,7 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt /SharedAssemblyVersion.cs +I[V|v][V|v]*/ +I[V|v][V|v]*.* +*I[V|v][V|v]/ *I[V|v][V|v].* -I[V|v][V|v]* \ No newline at end of file diff --git a/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj b/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj index 5c316041..90ca7423 100644 --- a/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj +++ b/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj @@ -29,6 +29,7 @@ TRACE prompt 4 + bin\Release\SharpMap.Converters.GeoJSON.XML diff --git a/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj b/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj index 2a9f0f9f..677978d7 100644 --- a/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj +++ b/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj @@ -29,6 +29,7 @@ TRACE prompt 4 + bin\Release\SharpMap.Converters.Spatialite.XML diff --git a/SharpMap.Converters.nuspec b/SharpMap.Converters.nuspec new file mode 100644 index 00000000..bc8152c1 --- /dev/null +++ b/SharpMap.Converters.nuspec @@ -0,0 +1,35 @@ + + + + SharpMap.Converters + $version$ + SharpMap-Team + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 + false + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + + This package contains components required for on-the-fly reprojection for SharpMap vector data using DotSpatial.Projections. + + SharpMap GIS Map GeoSpatial + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap.CoordinateSystems.DotSpatial.nuspec b/SharpMap.CoordinateSystems.DotSpatial.nuspec new file mode 100644 index 00000000..ce75fa4a --- /dev/null +++ b/SharpMap.CoordinateSystems.DotSpatial.nuspec @@ -0,0 +1,33 @@ + + + + SharpMap.CoordinateSystems.DotSpatial + $version$ + SharpMap-Team + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 + false + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + + This package contains components required for on-the-fly reprojection for SharpMap vector data using DotSpatial.Projections. + + SharpMap GIS Map GeoSpatial + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj index 7ce2ace9..375e686c 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj +++ b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj @@ -29,6 +29,7 @@ TRACE prompt 4 + bin\Release\SharpMap.CoordinateSystems.DotSpatial.XML diff --git a/SharpMap.CoordinateSystems.ProjNet.nuspec b/SharpMap.CoordinateSystems.ProjNet.nuspec new file mode 100644 index 00000000..59494df8 --- /dev/null +++ b/SharpMap.CoordinateSystems.ProjNet.nuspec @@ -0,0 +1,31 @@ + + + + SharpMap.CoordinateSystems.ProjNet + $version$ + SharpMap-Team + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 + false + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + + This package contains components required for on-the-fly reprojection for SharpMap vector data using ProjNet. + + SharpMap GIS Map GeoSpatial + + + + + + + + + + + + diff --git a/SharpMap.Core.nuspec b/SharpMap.Core.nuspec index 47cd0a54..00f6b8fa 100644 --- a/SharpMap.Core.nuspec +++ b/SharpMap.Core.nuspec @@ -1,12 +1,12 @@ - SharpMap + SharpMap.Core $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -28,16 +28,15 @@ Bug fixes - - - - - - + + + + + diff --git a/SharpMap.Data.Providers.GeoPackage.nuspec b/SharpMap.Data.Providers.GeoPackage.nuspec index 11ba6f17..1555d2a8 100644 --- a/SharpMap.Data.Providers.GeoPackage.nuspec +++ b/SharpMap.Data.Providers.GeoPackage.nuspec @@ -4,9 +4,9 @@ SharpMap.Data.Providers.GeoPackage $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -18,7 +18,7 @@ The engine is written in C# and based on the .Net 4.0 framework. SharpMap GIS Map OGC GeoPackage - + diff --git a/SharpMap.Data.Providers.Kml.nuspec b/SharpMap.Data.Providers.Kml.nuspec index ec282187..0baecb21 100644 --- a/SharpMap.Data.Providers.Kml.nuspec +++ b/SharpMap.Data.Providers.Kml.nuspec @@ -4,9 +4,9 @@ SharpMap.Data.Providers.Kml $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -21,7 +21,7 @@ The engine is written in C# and based on the .Net 4.0 framework. - + diff --git a/SharpMap.Data.Providers.OracleSpatial.nuspec b/SharpMap.Data.Providers.OracleSpatial.nuspec index 193dea1b..653b81a4 100644 --- a/SharpMap.Data.Providers.OracleSpatial.nuspec +++ b/SharpMap.Data.Providers.OracleSpatial.nuspec @@ -6,9 +6,9 @@ SharpMap.Data.Providers.OracleSpatial Triona AB, Peter Lofas SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap data provider for Oracle Copyright © Triona AB 2014 diff --git a/SharpMap.Extensions.nuspec b/SharpMap.Extensions.nuspec index 7a07f5a5..5e5af2c4 100644 --- a/SharpMap.Extensions.nuspec +++ b/SharpMap.Extensions.nuspec @@ -4,9 +4,9 @@ SharpMap.Extensions $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -21,11 +21,12 @@ The engine is written in C# and based on the .Net 4.0 framework. - - + + - + + diff --git a/SharpMap.Layers.BruTile.nuspec b/SharpMap.Layers.BruTile.nuspec index bc723ea7..5608d080 100644 --- a/SharpMap.Layers.BruTile.nuspec +++ b/SharpMap.Layers.BruTile.nuspec @@ -1,12 +1,12 @@ - SharpMap + SharpMap.Layers.BruTile $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -18,18 +18,17 @@ New Features Bug fixes - This package contains the core components of SharpMap. + This package contains the components of SharpMap required to render tiled web-map-service maps. SharpMap GIS Map GeoSpatial - - - - + + + diff --git a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj index fb2e0d2b..cc865e45 100644 --- a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj +++ b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj @@ -30,6 +30,7 @@ TRACE prompt 4 + bin\Release\SharpMap.Layers.BruTile.XML diff --git a/SharpMap.Layers.HeatLayer.nuspec b/SharpMap.Layers.HeatLayer.nuspec index ac1e44c5..c0aa6ef4 100644 --- a/SharpMap.Layers.HeatLayer.nuspec +++ b/SharpMap.Layers.HeatLayer.nuspec @@ -6,15 +6,20 @@ SharpMap.Data.Layers.HeatLayer SharpMap-Team SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false - Heat layer for SharpMap - Copyright © 2013 + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + A heat layer for SharpMap + Copyright © 2013-2017 SharpMap - Team SharpMap Heat - + diff --git a/SharpMap.UI.nuspec b/SharpMap.UI.nuspec index 85cd1c6f..57a04fb2 100644 --- a/SharpMap.UI.nuspec +++ b/SharpMap.UI.nuspec @@ -4,9 +4,9 @@ SharpMap.UI $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -14,7 +14,7 @@ It provides access to many types of GIS data, enables spatial querying of that d The engine is written in C# and based on the .Net 4.0 framework. - This package contains the Windows Forms user interface components of SharpMap. + This package contains the System.Windows.Forms based user interface components of SharpMap. SharpMap GIS Map GeoSpatial diff --git a/SharpMap.Utilities.Indexing.SbnTree.nuspec b/SharpMap.Utilities.Indexing.SbnTree.nuspec new file mode 100644 index 00000000..cded2ec7 --- /dev/null +++ b/SharpMap.Utilities.Indexing.SbnTree.nuspec @@ -0,0 +1,30 @@ + + + + SharpMap.Utilities.Indexing.SbnTree + $version$ + SharpMap.Utilities.Indexing.SbnTree + SharpMap-Team + SharpMap-Team + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 + false + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + Components to use SharpSbn as spatial index for ShapeFiles + Copyright © 2015 - 2017 SharpMap - Team + SharpMap Index Sbn + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj b/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj index c30ff9af..8957fb8f 100644 --- a/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj +++ b/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj @@ -13,7 +13,6 @@ 512 Client ..\ - true @@ -31,6 +30,7 @@ TRACE prompt 4 + bin\Release\SharpMap.Utilities.Indexing.SbnTree.XML diff --git a/SharpMap.Web.nuspec b/SharpMap.Web.nuspec index ec6cceb6..988bffce 100644 --- a/SharpMap.Web.nuspec +++ b/SharpMap.Web.nuspec @@ -4,9 +4,9 @@ SharpMap.Web $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. diff --git a/SharpMap.nuspec b/SharpMap.nuspec index 6f426ec2..38ed3c84 100644 --- a/SharpMap.nuspec +++ b/SharpMap.nuspec @@ -4,9 +4,9 @@ SharpMap $version$ SharpMap-Team - http://sharpmap.codeplex.com/license - http://sharpmap.codeplex.com - + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 false SharpMap is an easy-to-use mapping library for use in web and desktop applications. @@ -27,9 +27,9 @@ Combination of SharpMap.Core and SharpMap.Layers.BruTile - - + + - + diff --git a/SharpMap.proj b/SharpMap.proj index 747b2f20..6f070c34 100644 --- a/SharpMap.proj +++ b/SharpMap.proj @@ -17,14 +17,14 @@ @@ -34,26 +34,28 @@ - - - - - - - - - + + + - + + + + + - - - - - - + + + + + + + + + + @@ -130,6 +132,6 @@ - + From 597967e0b3fbac963b25118e2bc177f095d81c70 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Thu, 11 May 2017 11:56:12 +0200 Subject: [PATCH 016/186] Adding SharpMap.UI.WPF to list of possible nuget packages --- SharpMap.UI.WPF.nuspec | 35 ++++++++++++++++++++++++++ SharpMap.UI.WPF/SharpMap.UI.WPF.csproj | 2 +- SharpMap.proj | 4 +-- SharpMap.sln | 9 +++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 SharpMap.UI.WPF.nuspec diff --git a/SharpMap.UI.WPF.nuspec b/SharpMap.UI.WPF.nuspec new file mode 100644 index 00000000..d0a005c8 --- /dev/null +++ b/SharpMap.UI.WPF.nuspec @@ -0,0 +1,35 @@ + + + + SharpMap.UI.WPF + $version$ + SharpMap-Team + https://github.com/SharpMap/SharpMap/blob/Branches/1.0/license.txt + https://github.com/SharpMap/SharpMap + https://avatars1.githubusercontent.com/u/8349804??v=3&s=120 + false + + SharpMap is an easy-to-use mapping library for use in web and desktop applications. + It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. + The engine is written in C# and based on the .Net 4.0 framework. + + + This package contains the System.Windows.Forms based user interface components of SharpMap. + + SharpMap GIS Map GeoSpatial + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj b/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj index 1778f715..0fed97f7 100644 --- a/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj +++ b/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj @@ -13,7 +13,6 @@ 512 Client ..\ - true @@ -33,6 +32,7 @@ prompt 4 false + bin\Release\SharpMap.UI.WPF.XML diff --git a/SharpMap.proj b/SharpMap.proj index 6f070c34..4d7f2d18 100644 --- a/SharpMap.proj +++ b/SharpMap.proj @@ -17,14 +17,14 @@ diff --git a/SharpMap.sln b/SharpMap.sln index 7e0cb633..9e5988c4 100644 --- a/SharpMap.sln +++ b/SharpMap.sln @@ -31,11 +31,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuspec", ".nuspec", "{4A4D9659-A105-465B-861B-1E8B52F95C4F}" ProjectSection(SolutionItems) = preProject + SharpMap.Converters.nuspec = SharpMap.Converters.nuspec + SharpMap.CoordinateSystems.DotSpatial.nuspec = SharpMap.CoordinateSystems.DotSpatial.nuspec + SharpMap.CoordinateSystems.ProjNet.nuspec = SharpMap.CoordinateSystems.ProjNet.nuspec + SharpMap.Core.nuspec = SharpMap.Core.nuspec + SharpMap.Data.Providers.GeoPackage.nuspec = SharpMap.Data.Providers.GeoPackage.nuspec + SharpMap.Data.Providers.Kml.nuspec = SharpMap.Data.Providers.Kml.nuspec SharpMap.Data.Providers.OracleSpatial.nuspec = SharpMap.Data.Providers.OracleSpatial.nuspec SharpMap.Extensions.nuspec = SharpMap.Extensions.nuspec + SharpMap.Layers.BruTile.nuspec = SharpMap.Layers.BruTile.nuspec SharpMap.Layers.HeatLayer.nuspec = SharpMap.Layers.HeatLayer.nuspec SharpMap.nuspec = SharpMap.nuspec SharpMap.UI.nuspec = SharpMap.UI.nuspec + SharpMap.UI.WPF.nuspec = SharpMap.UI.WPF.nuspec + SharpMap.Utilities.Indexing.SbnTree.nuspec = SharpMap.Utilities.Indexing.SbnTree.nuspec SharpMap.Web.nuspec = SharpMap.Web.nuspec EndProjectSection EndProject From 7dd6e80052c919c734024abb4c520da9b7a506fb Mon Sep 17 00:00:00 2001 From: FObermaier Date: Thu, 11 May 2017 14:30:07 +0200 Subject: [PATCH 017/186] Implement ICoordinateSystem.GetAxis and ICoordinateSystem.GetUnit to the best of my knowledge (issue #10). --- .../DotSpatialCoordinateSystem.cs | 129 +++++++++++++++++- 1 file changed, 126 insertions(+), 3 deletions(-) diff --git a/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs b/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs index b7dd85d3..5429c0e5 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs +++ b/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs @@ -1,12 +1,40 @@ - +/* + * Copyright © 2017 - Felix Obermaier, Ingenieurgruppe IVV GmbH & Co. KG + * + * This file is part of SharpMap.CoordinateSystems.DotSpatial. + * + * SharpMap.CoordinateSystems.DotSpatial is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * SharpMap.CoordinateSystems.DotSpatial is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public License + * along with SharpMap; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ using System; using DotSpatial.Projections; using GeoAPI.CoordinateSystems; namespace SharpMap.CoordinateSystems { + /// + /// A wrapper around a + /// public class DotSpatialCoordinateSystem : ICoordinateSystem { + private static readonly string[] _latLonNames = { "Longitude", "Latitude" }; + private static readonly string[] _eastNorthNames = { "East", "North" }; + + private static readonly AxisOrientationEnum[] _axisOrientation = + {AxisOrientationEnum.East, AxisOrientationEnum.North,}; + private readonly ProjectionInfo _projectionInfo; private string _wkt; private readonly string _alias; @@ -137,15 +165,110 @@ public string XML /// Axis info public AxisInfo GetAxis(int dimension) { - throw new NotSupportedException(); + return ToAxisInfo(_projectionInfo, dimension); + } + + private AxisInfo ToAxisInfo(ProjectionInfo projectionInfo, int dimension) + { + if (projectionInfo.IsLatLon) + return new AxisInfo(_latLonNames[dimension], _axisOrientation[dimension]); + return new AxisInfo(_eastNorthNames[dimension], _axisOrientation[dimension]); } /// Gets units for dimension within coordinate system. public IUnit GetUnits(int dimension) { - throw new NotSupportedException(); + return ToUnit(_projectionInfo); + } + + private static IUnit ToUnit(ProjectionInfo projDescriptor) + { + if (projDescriptor.IsLatLon) + return new AngularUnitWrapper(projDescriptor.GeographicInfo.Unit); + + return new LinearUnitWrapper(projDescriptor.Unit); + } + + private abstract class UnitWrapper : IUnit + { + protected readonly IProjDescriptor Descriptor; + + protected UnitWrapper(IProjDescriptor descriptor) + { + Descriptor = descriptor; + } + + public abstract string Name { get; } + + public string Authority { get { return "DS"; } } + public long AuthorityCode { get { return 20000000; } } + public string Alias { get { return string.Empty; } } + public string Abbreviation { get { return string.Empty; } } + public string Remarks { get { return string.Empty; } } + public abstract string WKT { get; } + + public string XML { get { throw new NotSupportedException(); } } + + public abstract bool EqualParams(object obj); } + private class AngularUnitWrapper : UnitWrapper, IAngularUnit + { + private AngularUnit Unit + { + get { return (AngularUnit) Descriptor; } + } + + public AngularUnitWrapper(AngularUnit angularUnit) + :base(angularUnit) + { + } + + public override string Name { get { return Unit.Name; } } + + public override string WKT { get { return Unit.ToEsriString(); } } + + public override bool EqualParams(object obj) + { + if (obj == null) return false; + if (obj is AngularUnitWrapper) + return ((AngularUnitWrapper) obj).RadiansPerUnit == RadiansPerUnit; + return false; + } + + + public double RadiansPerUnit { get; set; } + } + + private class LinearUnitWrapper : UnitWrapper, ILinearUnit + { + private LinearUnit Unit + { + get { return (LinearUnit)Descriptor; } + } + + public LinearUnitWrapper(LinearUnit linearUnit) + : base(linearUnit) + { + } + + public override string Name { get { return Unit.Name; } } + + public override string WKT { get { return Unit.ToEsriString(); } } + + public override bool EqualParams(object obj) + { + if (obj == null) return false; + if (obj is LinearUnitWrapper) + return ((LinearUnitWrapper)obj).MetersPerUnit == MetersPerUnit; + return false; + } + + + public double MetersPerUnit { get; set; } + } + + /// Dimension of the coordinate system. public int Dimension { From e17d87030938862cb5cad23187860e409224a70b Mon Sep 17 00:00:00 2001 From: FObermaier Date: Thu, 11 May 2017 14:35:00 +0200 Subject: [PATCH 018/186] Additional fix for #10 --- .../DotSpatialCoordinateSystem.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs b/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs index 5429c0e5..721c8051 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs +++ b/SharpMap.CoordinateSystems.DotSpatial/DotSpatialCoordinateSystem.cs @@ -237,7 +237,11 @@ public override bool EqualParams(object obj) } - public double RadiansPerUnit { get; set; } + public double RadiansPerUnit + { + get { return Unit.Radians; } + set { Unit.Radians = value; } + } } private class LinearUnitWrapper : UnitWrapper, ILinearUnit @@ -265,7 +269,11 @@ public override bool EqualParams(object obj) } - public double MetersPerUnit { get; set; } + public double MetersPerUnit + { + get { return Unit.Meters; } + set { Unit.Meters = value; } + } } From a222a62227fd07d4daefacc1d7dbc04d4997335b Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Thu, 11 May 2017 21:21:23 +0200 Subject: [PATCH 019/186] Update SharpMap.proj --- SharpMap.proj | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/SharpMap.proj b/SharpMap.proj index 4d7f2d18..eda46576 100644 --- a/SharpMap.proj +++ b/SharpMap.proj @@ -37,25 +37,16 @@ + + Release + + - - - - - - - - - - - - - From 2e84c207e785a293d32af1fa4c7f0a389a9c593f Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Tue, 16 May 2017 09:22:34 +0700 Subject: [PATCH 020/186] 1) consistent use of LOCK in GeometryProvider, GeometryFeatureProvider, and VectorLayer 2) set SRID in GeometryFeatureProvider constructors (as per GeometryProvider) 3) DbaseReader define PrimaryKey when IncludeOid = true 4) add support for Oid in GeometryFeatureProvider to preserve Oid after selecting from ShapeFile dataprovider. Other DataProviders (eg MsSql) to be reviewed on case-by-case basis. --- SharpMap/Data/Providers/DbaseReader.cs | 5 +- .../Data/Providers/GeometryFeatureProvider.cs | 122 ++++++++++++--- SharpMap/Data/Providers/GeometryProvider.cs | 56 ++++--- SharpMap/Layers/VectorLayer.cs | 139 ++++++++++-------- 4 files changed, 222 insertions(+), 100 deletions(-) diff --git a/SharpMap/Data/Providers/DbaseReader.cs b/SharpMap/Data/Providers/DbaseReader.cs index 831b54eb..5aa4a0b9 100644 --- a/SharpMap/Data/Providers/DbaseReader.cs +++ b/SharpMap/Data/Providers/DbaseReader.cs @@ -765,8 +765,11 @@ private void CreateBaseTable() { _baseTable = new FeatureDataTable(); if (IncludeOid) + { _baseTable.Columns.Add("Oid", typeof(UInt32)); - + _baseTable.PrimaryKey = new DataColumn[] { _baseTable.Columns[0] }; + } + foreach (var dbf in _dbaseColumns) { //_baseTable.Columns.Add(dbf.ColumnName, dbf.DataType); diff --git a/SharpMap/Data/Providers/GeometryFeatureProvider.cs b/SharpMap/Data/Providers/GeometryFeatureProvider.cs index ee6d6a27..239b95cf 100644 --- a/SharpMap/Data/Providers/GeometryFeatureProvider.cs +++ b/SharpMap/Data/Providers/GeometryFeatureProvider.cs @@ -21,6 +21,7 @@ using System.Collections.ObjectModel; using System.Data; using GeoAPI.Geometries; +using System.ComponentModel; namespace SharpMap.Data.Providers { @@ -59,9 +60,9 @@ namespace SharpMap.Data.Providers /// public class GeometryFeatureProvider : FilterProvider, IProvider { - private readonly object _featuresLock = new object(); private readonly FeatureDataTable _features; private int _srid = -1; + private int _oid = -1; // primary key index from fdt schema or subsequently added unique constraint #region constructors @@ -72,13 +73,21 @@ public class GeometryFeatureProvider : FilterProvider, IProvider public GeometryFeatureProvider(IEnumerable geometries) { _features = new FeatureDataTable(); + _features.BeginLoadData(); foreach (var geom in geometries) { var fdr = _features.NewRow(); fdr.Geometry = geom; _features.AddRow(fdr); } + _features.AcceptChanges(); + _features.EndLoadData(); + _features.TableCleared += HandleFeaturesCleared; + _features.Constraints.CollectionChanged += HandleConstraintsCollectionChanged; + + if (_features.Count > 0 && _features[0].Geometry != null) + SRID = _features[0].Geometry.SRID; } /// @@ -89,6 +98,15 @@ public GeometryFeatureProvider(FeatureDataTable features) { _features = features; _features.TableCleared += HandleFeaturesCleared; + _features.Constraints.CollectionChanged += HandleConstraintsCollectionChanged; + + if (_features != null && _features.Count > 0) + if (_features[0].Geometry != null) + SRID = _features[0].Geometry.SRID; + + // eg ShapeFile datasource with IncludeOid = true + if (features.PrimaryKey.Length == 1) + _oid = ValidateOidDataType(features.PrimaryKey[0]); } /// @@ -100,18 +118,62 @@ public GeometryFeatureProvider(IGeometry geometry) _features = new FeatureDataTable(); var fdr = _features.NewRow(); fdr.Geometry = geometry; + if (geometry != null) + SRID = geometry.SRID; _features.AddRow(fdr); + _features.AcceptChanges(); + _features.TableCleared += HandleFeaturesCleared; + _features.Constraints.CollectionChanged += HandleConstraintsCollectionChanged; } #endregion private void HandleFeaturesCleared(object sender, DataTableClearEventArgs e) { - //maybe clear extents + //maybe clear extents, reset SRID //ok, maybe not } + private void HandleConstraintsCollectionChanged(object sender, CollectionChangeEventArgs e) + { + // rare cases when PK is explicitly added/removed subsequent to constructor + if (e.Element is UniqueConstraint) + { + UniqueConstraint uc; + uc = (UniqueConstraint)e.Element; + // Ensure we are dealing with PK.... + // IsPrimaryKey only True for REMOVE or REFRESH. When ADDing new PK constraint + // IsPrimaryKey is False until after constraint applied, so for this case confirm + // no existing PK and check constraint for single col, !AllowDBNull and Unique + if ((uc.IsPrimaryKey && _features.PrimaryKey.Length == 1) || + (_features.PrimaryKey.Length == 0 && uc.Columns.Length == 1 && + !uc.Columns[0].AllowDBNull && uc.Columns[0].Unique)) + { + if (e.Action == CollectionChangeAction.Remove) + _oid = -1; + else + _oid = ValidateOidDataType(uc.Columns[0]); + } + } + } + + private int ValidateOidDataType(DataColumn pk) + { + switch (Type.GetTypeCode(pk.DataType)) + { + case TypeCode.UInt16: + case TypeCode.UInt32: + case TypeCode.UInt64: + case TypeCode.Int16: + case TypeCode.Int32: + case TypeCode.Int64: + return pk.Ordinal; + default: + return -1; + } + } + /// /// Access to underlying /// @@ -119,7 +181,7 @@ public FeatureDataTable Features { get { - lock (_features) + lock (_features.Rows.SyncRoot) { return _features; } @@ -137,7 +199,7 @@ public Collection GetGeometriesInView(Envelope bbox) { var list = new Collection(); - lock (_features) + lock (_features.Rows.SyncRoot) { foreach (FeatureDataRow fdr in _features.Rows) if (!fdr.Geometry.IsEmpty) @@ -152,7 +214,7 @@ public Collection GetGeometriesInView(Envelope bbox) private IEnumerable> EnumerateFeatures(Envelope bbox) { - lock (_featuresLock) + lock (_features.Rows.SyncRoot) { uint id = 0; if (FilterDelegate == null) @@ -161,7 +223,12 @@ private IEnumerable> EnumerateFeatures(Envelo var geom = feature.Geometry; var testBox = geom != null ? geom.EnvelopeInternal : new Envelope(bbox); if (bbox.Intersects(testBox)) - yield return new KeyValuePair(id, feature); + { + if (_oid == -1) + yield return new KeyValuePair(id, feature); + else + yield return new KeyValuePair((uint)feature[_oid], feature); + } id++; } else @@ -170,7 +237,12 @@ private IEnumerable> EnumerateFeatures(Envelo var geom = feature.Geometry; var testBox = geom != null ? geom.EnvelopeInternal : new Envelope(bbox); if (bbox.Intersects(testBox) && FilterDelegate(feature)) - yield return new KeyValuePair(id, feature); + { + if (_oid == -1) + yield return new KeyValuePair(id, feature); + else + yield return new KeyValuePair((uint)feature[_oid], feature); + } id++; } } @@ -198,21 +270,32 @@ public Collection GetObjectIDsInView(Envelope bbox) /// geometry public IGeometry GetGeometryByID(uint oid) { - lock (_featuresLock) + lock (_features.Rows.SyncRoot) { - return ((FeatureDataRow)_features.Rows[(int)oid]).Geometry; + if (_oid == -1) + return ((FeatureDataRow)_features.Rows[(int)oid]).Geometry; + else + { + DataRow dr; + dr = _features.Rows.Find(_oid); + if (dr != null) + return ((FeatureDataRow)dr).Geometry; + else + return null; + } + } } /// - /// Throws an NotSupportedException. Attribute data is not supported by this datasource + /// Add datatable to dataset and populate with intersecting features (perform bounding box intersect followed by geom intersect) /// /// /// FeatureDataSet to fill data into public void ExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) { FeatureDataTable fdt; - lock (_featuresLock) + lock (_features.Columns.SyncRoot) fdt = _features.Clone(); fdt.BeginLoadData(); @@ -234,14 +317,14 @@ public void ExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) } /// - /// Throws an NotSupportedException. Attribute data is not supported by this datasource + /// Add datatable to dataset and populate with interesecting features /// /// /// FeatureDataSet to fill data into public void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) { FeatureDataTable fdt; - lock (_featuresLock) + lock (_features.Columns.SyncRoot) fdt = _features.Clone(); fdt.BeginLoadData(); @@ -249,10 +332,11 @@ public void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) { var fdr = idFeature.Value; fdt.LoadDataRow(fdr.ItemArray, false); - var geom = fdr.Geometry; + var geom = fdr.Geometry; if (geom != null) ((FeatureDataRow)fdt.Rows[fdt.Rows.Count - 1]).Geometry = (IGeometry)geom.Clone(); } + fdt.AcceptChanges(); fdt.EndLoadData(); ds.Tables.Add(fdt); @@ -264,7 +348,7 @@ public void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) /// number of features public int GetFeatureCount() { - lock(_featuresLock) + lock (_features.Rows.SyncRoot) return _features.Rows.Count; } @@ -275,7 +359,7 @@ public int GetFeatureCount() /// A feature data row public FeatureDataRow GetFeature(uint rowId) { - lock (_featuresLock) + lock (_features.Rows.SyncRoot) { if (rowId >= _features.Rows.Count) { @@ -300,10 +384,11 @@ public FeatureDataRow GetFeature(uint rowId) /// boundingbox public Envelope GetExtents() { - lock (_featuresLock) + lock (_features.Rows.SyncRoot) { if (_features.Rows.Count == 0) return null; + var box = new Envelope(); foreach (FeatureDataRow fdr in _features.Rows) @@ -365,6 +450,9 @@ public int SRID /// public void Dispose() { + _features.TableCleared -= HandleFeaturesCleared; + _features.Constraints.CollectionChanged -= HandleConstraintsCollectionChanged; + _features.Dispose(); } diff --git a/SharpMap/Data/Providers/GeometryProvider.cs b/SharpMap/Data/Providers/GeometryProvider.cs index 07e931c6..b2e6899a 100644 --- a/SharpMap/Data/Providers/GeometryProvider.cs +++ b/SharpMap/Data/Providers/GeometryProvider.cs @@ -21,6 +21,7 @@ using SharpMap.Converters.WellKnownBinary; using SharpMap.Converters.WellKnownText; using GeoAPI.Geometries; +using System.Collections; namespace SharpMap.Data.Providers { @@ -60,7 +61,7 @@ namespace SharpMap.Data.Providers [Serializable] public class GeometryProvider : PreparedGeometryProvider { - static GeometryProvider() { Map.Configure();} + static GeometryProvider() { Map.Configure(); } private List _geometries; /// @@ -99,7 +100,7 @@ public GeometryProvider(IEnumerable geometries) /// Feature to be in this datasource public GeometryProvider(FeatureDataRow feature) { - Geometries = new List {feature.Geometry}; + Geometries = new List { feature.Geometry }; } /// @@ -127,7 +128,7 @@ public GeometryProvider(IGeometry geometry) /// Initializes a new instance of the /// /// as Well-known Binary to be included in this datasource - public GeometryProvider(byte[] wellKnownBinaryGeometry) + public GeometryProvider(byte[] wellKnownBinaryGeometry) : this(GeometryFromWKB.Parse(wellKnownBinaryGeometry, GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory())) { } @@ -152,10 +153,13 @@ public GeometryProvider(string wellKnownTextGeometry) : this(GeometryFromWKT.Par public override Collection GetGeometriesInView(Envelope bbox) { var list = new Collection(); - for (var i = 0; i < _geometries.Count; i++) - if (!_geometries[i].IsEmpty) - if (bbox.Intersects(_geometries[i].EnvelopeInternal)) - list.Add(_geometries[i]); + lock (((ICollection)_geometries).SyncRoot) + { + for (var i = 0; i < _geometries.Count; i++) + if (!_geometries[i].IsEmpty) + if (bbox.Intersects(_geometries[i].EnvelopeInternal)) + list.Add(_geometries[i]); + } return list; } @@ -167,9 +171,12 @@ public override Collection GetGeometriesInView(Envelope bbox) public override Collection GetObjectIDsInView(Envelope bbox) { var list = new Collection(); - for (int i = 0; i < _geometries.Count; i++) - if (bbox.Intersects(_geometries[i].EnvelopeInternal)) - list.Add((uint) i); + lock (((ICollection)_geometries).SyncRoot) + { + for (int i = 0; i < _geometries.Count; i++) + if (bbox.Intersects(_geometries[i].EnvelopeInternal)) + list.Add((uint)i); + } return list; } @@ -180,7 +187,8 @@ public override Collection GetObjectIDsInView(Envelope bbox) /// geometry public override IGeometry GetGeometryByID(uint oid) { - return _geometries[(int) oid]; + lock (((ICollection)_geometries).SyncRoot) + return _geometries[(int)oid]; } /// @@ -209,7 +217,8 @@ public override void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) /// number of features public override int GetFeatureCount() { - return _geometries.Count; + lock (((ICollection)_geometries).SyncRoot) + return _geometries.Count; } /// @@ -228,16 +237,19 @@ public override FeatureDataRow GetFeature(uint rowId) /// boundingbox public override Envelope GetExtents() { - if (_geometries.Count == 0) - return null; - var box = new Envelope(_geometries[0].EnvelopeInternal); - - for (var i = 0; i < _geometries.Count; i++) + lock (((ICollection)_geometries).SyncRoot) { - if (!_geometries[i].IsEmpty) - box.ExpandToInclude(_geometries[i].EnvelopeInternal); + if (_geometries.Count == 0) + return null; + + var box = new Envelope(_geometries[0].EnvelopeInternal); + for (var i = 0; i < _geometries.Count; i++) + { + if (!_geometries[i].IsEmpty) + box.ExpandToInclude(_geometries[i].EnvelopeInternal); + } + return box; } - return box; } /// @@ -247,7 +259,9 @@ protected override void ReleaseManagedResources() { if (_geometries != null) { - _geometries.Clear(); + lock (((ICollection)_geometries).SyncRoot) + _geometries.Clear(); + _geometries = null; } } diff --git a/SharpMap/Layers/VectorLayer.cs b/SharpMap/Layers/VectorLayer.cs index ee0ee631..67eed67e 100644 --- a/SharpMap/Layers/VectorLayer.cs +++ b/SharpMap/Layers/VectorLayer.cs @@ -50,7 +50,7 @@ public class VectorLayer : Layer, ICanQueryLayer, ICloneable /// /// Name of layer public VectorLayer(string layername) - :base(new VectorStyle()) + : base(new VectorStyle()) { LayerName = layername; SmoothingMode = SmoothingMode.AntiAlias; @@ -65,7 +65,7 @@ public VectorLayer(string layername, IBaseProvider dataSource) : this(layername) { _dataSource = dataSource; } - /// + /// /// Gets or sets a Dictionary with themes suitable for this layer. A theme in the dictionary can be used for rendering be setting the Theme Property using a delegate function /// public Dictionary Themes @@ -142,28 +142,28 @@ public override Envelope Envelope { if (DataSource == null) throw (new ApplicationException("DataSource property not set on layer '" + LayerName + "'")); - + if (_envelope != null && CacheExtent) return ToTarget(_envelope.Clone()); Envelope box; lock (_dataSource) { + // Is datasource already open? bool wasOpen = DataSource.IsOpen; - if (!wasOpen) - DataSource.Open(); + if (!wasOpen) { DataSource.Open(); } + box = DataSource.GetExtents(); - if (!wasOpen) //Restore state - DataSource.Close(); - if (CacheExtent) - _envelope = box; + if (!wasOpen) { DataSource.Close(); } } + if (CacheExtent) + _envelope = box; + return ToTarget(box); } } - /// /// Gets or sets a value indicating whether the layer envelope should be treated as static or not. /// @@ -187,7 +187,7 @@ public override int SRID return DataSource.SRID; } set { DataSource.SRID = value; } - } + } #region IDisposable Members @@ -195,10 +195,10 @@ public override int SRID /// Disposes the object /// protected override void ReleaseManagedResources() - { + { if (DataSource != null) DataSource.Dispose(); - base.ReleaseManagedResources(); + base.ReleaseManagedResources(); } #endregion @@ -241,9 +241,13 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope, IT var ds = new FeatureDataSet(); lock (_dataSource) { - DataSource.Open(); + // Is datasource already open? + bool wasOpen = DataSource.IsOpen; + if (!wasOpen) { DataSource.Open(); } + DataSource.ExecuteIntersectionQuery(envelope, ds); - DataSource.Close(); + + if (!wasOpen) { DataSource.Close(); } } double scale = map.GetMapScale((int)g.DpiX); @@ -342,10 +346,12 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope) if (!Style.Enabled) return; IEnumerable stylesToRender = GetStylesToRender(Style); - - if (stylesToRender== null) + + if (stylesToRender == null) return; + Collection geoms = null; + foreach (var style in stylesToRender) { if (!(style is VectorStyle) || !style.Enabled) @@ -354,33 +360,32 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope) { if (vStyle != null) { - Collection geoms; - // Is datasource already open? - lock (_dataSource) + if (geoms == null) { - bool alreadyOpen = DataSource.IsOpen; + lock (_dataSource) + { + // Is datasource already open? + bool wasOpen = DataSource.IsOpen; + if (!wasOpen) { DataSource.Open(); } - // If not open yet, open it - if (!alreadyOpen) { DataSource.Open(); } + // Read data + geoms = DataSource.GetGeometriesInView(envelope); - // Read data - geoms = DataSource.GetGeometriesInView(envelope); + if (!wasOpen) { DataSource.Close(); } + } if (_logger.IsDebugEnabled) { _logger.DebugFormat("Layer {0}, NumGeometries {1}", LayerName, geoms.Count); } - // If was not open, close it - if (!alreadyOpen) { DataSource.Close(); } - } - - // Transform geometries if necessary - if (CoordinateTransformation != null) - { - for (int i = 0; i < geoms.Count; i++) + // Transform geometries if necessary + if (CoordinateTransformation != null) { - geoms[i] = ToTarget(geoms[i]); + for (int i = 0; i < geoms.Count; i++) + { + geoms[i] = ToTarget(geoms[i]); + } } } @@ -467,34 +472,34 @@ protected void RenderGeometry(Graphics g, MapViewport map, IGeometry feature, Ve { case OgcGeometryType.Polygon: if (style.EnableOutline) - VectorRenderer.DrawPolygon(g, (IPolygon) feature, style.Fill, style.Outline, _clippingEnabled, + VectorRenderer.DrawPolygon(g, (IPolygon)feature, style.Fill, style.Outline, _clippingEnabled, map); else - VectorRenderer.DrawPolygon(g, (IPolygon) feature, style.Fill, null, _clippingEnabled, map); + VectorRenderer.DrawPolygon(g, (IPolygon)feature, style.Fill, null, _clippingEnabled, map); break; case OgcGeometryType.MultiPolygon: if (style.EnableOutline) - VectorRenderer.DrawMultiPolygon(g, (IMultiPolygon) feature, style.Fill, style.Outline, + VectorRenderer.DrawMultiPolygon(g, (IMultiPolygon)feature, style.Fill, style.Outline, _clippingEnabled, map); else - VectorRenderer.DrawMultiPolygon(g, (IMultiPolygon) feature, style.Fill, null, _clippingEnabled, + VectorRenderer.DrawMultiPolygon(g, (IMultiPolygon)feature, style.Fill, null, _clippingEnabled, map); break; case OgcGeometryType.LineString: if (style.LineSymbolizer != null) { - style.LineSymbolizer.Render(map, (ILineString)feature, g); + style.LineSymbolizer.Render(map, (ILineString)feature, g); return; } - VectorRenderer.DrawLineString(g, (ILineString) feature, style.Line, map, style.LineOffset); + VectorRenderer.DrawLineString(g, (ILineString)feature, style.Line, map, style.LineOffset); return; case OgcGeometryType.MultiLineString: if (style.LineSymbolizer != null) { - style.LineSymbolizer.Render(map, (IMultiLineString)feature, g); + style.LineSymbolizer.Render(map, (IMultiLineString)feature, g); return; } - VectorRenderer.DrawMultiLineString(g, (IMultiLineString) feature, style.Line, map, style.LineOffset); + VectorRenderer.DrawMultiLineString(g, (IMultiLineString)feature, style.Line, map, style.LineOffset); break; case OgcGeometryType.Point: if (style.PointSymbolizer != null) @@ -519,7 +524,7 @@ protected void RenderGeometry(Graphics g, MapViewport map, IGeometry feature, Ve } if (style.Symbol != null || style.PointColor == null) { - VectorRenderer.DrawMultiPoint(g, (IMultiPoint) feature, style.Symbol, style.SymbolScale, + VectorRenderer.DrawMultiPoint(g, (IMultiPoint)feature, style.Symbol, style.SymbolScale, style.SymbolOffset, style.SymbolRotation, map); } else @@ -527,7 +532,7 @@ protected void RenderGeometry(Graphics g, MapViewport map, IGeometry feature, Ve VectorRenderer.DrawMultiPoint(g, (IMultiPoint)feature, style.PointColor, style.PointSize, style.SymbolOffset, map); } break; - case OgcGeometryType.GeometryCollection: + case OgcGeometryType.GeometryCollection: var coll = (IGeometryCollection)feature; for (var i = 0; i < coll.NumGeometries; i++) { @@ -551,17 +556,23 @@ public void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds) { box = ToSource(box); + int tableCount = ds.Tables.Count; + lock (_dataSource) { - _dataSource.Open(); - int tableCount = ds.Tables.Count; + // Is datasource already open? + bool wasOpen = _dataSource.IsOpen; + if (!wasOpen) { _dataSource.Open(); } + _dataSource.ExecuteIntersectionQuery(box, ds); - if (ds.Tables.Count > tableCount) - { - //We added a table, name it according to layer - ds.Tables[ds.Tables.Count - 1].TableName = LayerName; - } - _dataSource.Close(); + + if (!wasOpen) { DataSource.Close(); } + } + + if (ds.Tables.Count > tableCount) + { + //We added a table, name it according to layer + ds.Tables[ds.Tables.Count - 1].TableName = LayerName; } } @@ -574,17 +585,23 @@ public void ExecuteIntersectionQuery(IGeometry geometry, FeatureDataSet ds) { geometry = ToSource(geometry); + int tableCount = ds.Tables.Count; + lock (_dataSource) { - _dataSource.Open(); - int tableCount = ds.Tables.Count; + // Is datasource already open? + bool wasOpen = DataSource.IsOpen; + if (!wasOpen) { DataSource.Open(); } + _dataSource.ExecuteIntersectionQuery(geometry, ds); - if (ds.Tables.Count > tableCount) - { - //We added a table, name it according to layer - ds.Tables[ds.Tables.Count - 1].TableName = LayerName; - } - _dataSource.Close(); + + if (!wasOpen) { DataSource.Close(); } + } + + if (ds.Tables.Count > tableCount) + { + //We added a table, name it according to layer + ds.Tables[ds.Tables.Count - 1].TableName = LayerName; } } @@ -604,7 +621,7 @@ public object Clone() var res = (VectorLayer)MemberwiseClone(); res.Style = Style.Clone(); if (Theme is ICloneable) - res.Theme = (ITheme) ((ICloneable) Theme).Clone(); + res.Theme = (ITheme)((ICloneable)Theme).Clone(); return res; } } From 80a19b8079de1c0cdcf693d530fad157030fc871 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Tue, 16 May 2017 15:12:03 +0700 Subject: [PATCH 021/186] Modify VariableLayerCollection to work with multiple maps: 1) replace static members/methods (previously used to avoid race condition) with intance members/methods 2) bug fix for double refreshes 3) handle potential race condition --- .../FormMovingObjectOverTileLayer.Designer.cs | 14 ++-- .../FormMovingObjectOverTileLayer.cs | 9 ++- .../Samples/ShapefileSampleOsm.cs | 2 +- .../WinFormSamples/Samples/TileLayerSample.cs | 2 +- SharpMap.UI/Forms/MapBox.cs | 11 ++- SharpMap.UI/Forms/MapImage.cs | 18 ++++- .../ToolBar/MapVariableLayerToolStrip.cs | 7 +- SharpMap/Layers/VariableLayerCollection.cs | 81 ++++++++++--------- SharpMap/Map/Map.cs | 8 +- 9 files changed, 89 insertions(+), 63 deletions(-) diff --git a/Examples/WinFormSamples/FormMovingObjectOverTileLayer.Designer.cs b/Examples/WinFormSamples/FormMovingObjectOverTileLayer.Designer.cs index 09f95ddb..685c694d 100644 --- a/Examples/WinFormSamples/FormMovingObjectOverTileLayer.Designer.cs +++ b/Examples/WinFormSamples/FormMovingObjectOverTileLayer.Designer.cs @@ -31,8 +31,8 @@ private void InitializeComponent() this.components = new System.ComponentModel.Container(); this.button4 = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); - this.mapBox1 = new SharpMap.Forms.MapBox(); this.timer1 = new System.Windows.Forms.Timer(this.components); + this.mapBox1 = new SharpMap.Forms.MapBox(); this.SuspendLayout(); // // button4 @@ -55,13 +55,20 @@ private void InitializeComponent() this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // + // timer1 + // + this.timer1.Interval = 50; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // // mapBox1 // this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.mapBox1.CustomTool = null; this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.mapBox1.FineZoomFactor = 10D; this.mapBox1.Location = new System.Drawing.Point(0, 0); + this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; this.mapBox1.Name = "mapBox1"; this.mapBox1.PreviewMode = SharpMap.Forms.MapBox.PreviewModes.Fast; this.mapBox1.QueryGrowFactor = 5F; @@ -74,11 +81,6 @@ private void InitializeComponent() this.mapBox1.Text = "mapBox1"; this.mapBox1.WheelZoomMagnitude = 2D; // - // timer1 - // - this.timer1.Interval = 20; - this.timer1.Tick += new System.EventHandler(this.timer1_Tick); - // // FormMovingObjectOverTileLayer // this.ClientSize = new System.Drawing.Size(669, 503); diff --git a/Examples/WinFormSamples/FormMovingObjectOverTileLayer.cs b/Examples/WinFormSamples/FormMovingObjectOverTileLayer.cs index 1a134ab4..f2fa7852 100644 --- a/Examples/WinFormSamples/FormMovingObjectOverTileLayer.cs +++ b/Examples/WinFormSamples/FormMovingObjectOverTileLayer.cs @@ -23,7 +23,7 @@ public partial class FormMovingObjectOverTileLayer : Form public FormMovingObjectOverTileLayer() { - + InitializeComponent(); this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); this.UpdateStyles(); @@ -55,7 +55,7 @@ private void FormMovingObjectOverTileLayer_Load(object sender, EventArgs e) staticLayer.DataSource = geoProviderFixed; this.mapBox1.Map.Layers.Add(staticLayer); - + //Adds a moving variable layer VectorLayer pushPinLayer = new VectorLayer("PushPins"); position = geom.Centre; @@ -96,8 +96,9 @@ private void timer1_Tick(object sender, EventArgs e) else if (position.Y > this.mapBox1.Map.Envelope.MaxY) movingUp = false; - VariableLayerCollection.TouchTimer(); - //this.mapBox1.Refresh(); + //static method replaced by instance method + //VariableLayerCollection.TouchTimer(); + this.mapBox1.Map.VariableLayers.TouchTimer(); } diff --git a/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs b/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs index e0563577..e87ebcf1 100644 --- a/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs +++ b/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs @@ -334,7 +334,7 @@ private static Map InitializeMapOsm(float angle) bmp.MakeTransparent(bmp.GetPixel(0, 0)); vl.Style.Symbol = bmp; - VariableLayerCollection.Interval = 500; + map.VariableLayers.Interval = 500; map.VariableLayers.Add(vl); //Restrict zoom diff --git a/Examples/WinFormSamples/Samples/TileLayerSample.cs b/Examples/WinFormSamples/Samples/TileLayerSample.cs index eabbf15f..fbc3799f 100644 --- a/Examples/WinFormSamples/Samples/TileLayerSample.cs +++ b/Examples/WinFormSamples/Samples/TileLayerSample.cs @@ -149,7 +149,7 @@ private static SharpMap.Map InitializeMapOsmWithVariableLayerCollection(float an vl.Theme = new SharpMap.Rendering.Thematics.CustomTheme(pttTrolley.GetStyle); vl.CoordinateTransformation = GetCoordinateTransformation(); map.VariableLayers.Add(vl); - SharpMap.Layers.VariableLayerCollection.Interval = 5000; + map.VariableLayers.Interval = 5000; map.ZoomToBox(vl.Envelope); diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index 69d1995d..4d1173a7 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -770,7 +770,7 @@ public MapBox() ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); base.DoubleBuffered = true; _map = new Map(ClientSize); - VariableLayerCollection.VariableLayerCollectionRequery += HandleVariableLayersRequery; + _map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; _map.RefreshNeeded += HandleRefreshNeeded; _map.MapNewTileAvaliable += HandleMapNewTileAvaliable; @@ -816,9 +816,12 @@ protected override void Dispose(bool disposing) if (_isDisposed || IsDisposed) return; - VariableLayerCollection.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + if (_map != null) { + // special handling to prevent spurious VariableLayers events + _map.VariableLayers.Interval = 0; + _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; _map.RefreshNeeded -= HandleRefreshNeeded; } @@ -1735,7 +1738,7 @@ protected virtual void OnMapChanging(CancelEventArgs e) if (_map != null) { - VariableLayerCollection.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; _map.RefreshNeeded -= HandleRefreshNeeded; } @@ -1749,7 +1752,7 @@ protected virtual void OnMapChanged(EventArgs e) { if (_map != null) { - VariableLayerCollection.VariableLayerCollectionRequery += HandleVariableLayersRequery; + _map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; _map.MapNewTileAvaliable += HandleMapNewTileAvaliable; _map.RefreshNeeded += HandleRefreshNeeded; Refresh(); diff --git a/SharpMap.UI/Forms/MapImage.cs b/SharpMap.UI/Forms/MapImage.cs index a5d712ca..e9844987 100644 --- a/SharpMap.UI/Forms/MapImage.cs +++ b/SharpMap.UI/Forms/MapImage.cs @@ -107,12 +107,24 @@ public MapImage() base.MouseDown += new System.Windows.Forms.MouseEventHandler(MapImage_MouseDown); base.MouseWheel += new System.Windows.Forms.MouseEventHandler(MapImage_Wheel); base.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(MapImage_DblClick); - VariableLayerCollection.VariableLayerCollectionRequery += this.VariableLayersRequery; + _map.VariableLayers.VariableLayerCollectionRequery += this.VariableLayersRequery; Cursor = Cursors.Cross; DoubleBuffered = true; } - protected override void Dispose(bool disposing) { VariableLayerCollection.VariableLayerCollectionRequery -= this.VariableLayersRequery; base.Dispose(disposing); } [Description("The amount which a single movement of the mouse wheel zooms by.")] + protected override void Dispose(bool disposing) + { + if (_map != null) + { + // special handling to prevent spurious VariableLayers events + _map.VariableLayers.Interval = 0; + _map.VariableLayers.VariableLayerCollectionRequery -= this.VariableLayersRequery; + } + + base.Dispose(disposing); + } + + [Description("The amount which a single movement of the mouse wheel zooms by.")] [DefaultValue(-2)] [Category("Behavior")] public double WheelZoomMagnitude @@ -156,7 +168,7 @@ public Map Map _map = value; if (_map != null) { - VariableLayerCollection.VariableLayerCollectionRequery += new VariableLayerCollectionRequeryHandler(VariableLayersRequery); + _map.VariableLayers.VariableLayerCollectionRequery += new VariableLayerCollectionRequeryHandler(VariableLayersRequery); Refresh(); } } diff --git a/SharpMap.UI/Forms/ToolBar/MapVariableLayerToolStrip.cs b/SharpMap.UI/Forms/ToolBar/MapVariableLayerToolStrip.cs index ffefb021..649dd029 100644 --- a/SharpMap.UI/Forms/ToolBar/MapVariableLayerToolStrip.cs +++ b/SharpMap.UI/Forms/ToolBar/MapVariableLayerToolStrip.cs @@ -14,7 +14,7 @@ public class MapVariableLayerToolStrip : MapToolStrip private System.Timers.Timer _timer; public MapVariableLayerToolStrip() - :base() + : base() { InitializeComponent(); } @@ -74,7 +74,7 @@ protected override void OnMapControlChangingInternal(System.ComponentModel.Cance private void OnTextChanged(object sender, EventArgs e) { int val; - if (int.TryParse(_interval.Text, System.Globalization.NumberStyles.Integer, + if (int.TryParse(_interval.Text, System.Globalization.NumberStyles.Integer, System.Globalization.NumberFormatInfo.InvariantInfo, out val)) { if (val < 500) val = 500; @@ -103,7 +103,8 @@ private void OnTouchTimer(object sender, System.Timers.ElapsedEventArgs e) { if (Logger.IsDebugEnabled) Logger.DebugFormat("Touching timer at {0}", e.SignalTime); - SharpMap.Layers.VariableLayerCollection.TouchTimer(); + + base.MapControl.Map.VariableLayers.TouchTimer(); } } } diff --git a/SharpMap/Layers/VariableLayerCollection.cs b/SharpMap/Layers/VariableLayerCollection.cs index 7b66d344..13b9ac8a 100644 --- a/SharpMap/Layers/VariableLayerCollection.cs +++ b/SharpMap/Layers/VariableLayerCollection.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Timers; @@ -30,7 +31,7 @@ public enum LayerCollectionType /// The sender of the event /// The arguments, EventArgs.Empty in all cases public delegate void VariableLayerCollectionRequeryHandler(object sender, EventArgs e); - + /// /// Layer collection /// @@ -38,39 +39,33 @@ public enum LayerCollectionType [Serializable] public class VariableLayerCollection : LayerCollection { - private readonly LayerCollection _staticLayers; - private static Timer _timer = null; + private readonly LayerCollection _variableLayers; + private Timer _timer = null; - private static bool touchTest = false; - /// /// Method to restart the internal Timer /// - public static void TouchTimer() + public void TouchTimer() { - if (touchTest == true) - { - System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(OnRequery)); - _timer.Start(); - } - else - { - touchTest = true; - } + // check for pending re-draw (eg after map pan/zoom completed) + if (_timer.Enabled) return; + + _timer.Start(); + System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(OnRequery)); } - + /// /// Event fired every to force requery; /// - public static event VariableLayerCollectionRequeryHandler VariableLayerCollectionRequery; + public event VariableLayerCollectionRequeryHandler VariableLayerCollectionRequery; /// /// Creates an instance of this class /// - /// Layer collection that holds static layers - public VariableLayerCollection(LayerCollection staticLayers) + /// Layer collection that holds layers with data sources updating frequently + public VariableLayerCollection(LayerCollection variableLayers) { - _staticLayers = staticLayers; + _variableLayers = variableLayers; if (_timer == null) { _timer = new Timer(); @@ -79,25 +74,22 @@ public VariableLayerCollection(LayerCollection staticLayers) } } - static void TimerElapsed(object sender, ElapsedEventArgs e) + private void TimerElapsed(object sender, ElapsedEventArgs e) { - touchTest = false; OnRequery(null); - if (!touchTest) - { - _timer.Stop(); - touchTest = true; - } } /// protected override void InsertItem(int index, ILayer layer) { - if (layer == null) + if (layer == null) throw new ArgumentNullException("layer", "The passed argument is null or not an ILayer"); - TestLayerPresent(_staticLayers, layer); - base.InsertItem(index, layer); + lock (((ICollection)_variableLayers).SyncRoot) + { + TestLayerPresent(_variableLayers, layer); + base.InsertItem(index, layer); + } } /* @@ -106,7 +98,7 @@ protected override void OnAddingNew(System.ComponentModel.AddingNewEventArgs e) ILayer newLayer = (e.NewObject as ILayer); if (newLayer == null) throw new ArgumentNullException("value", "The passed argument is null or not an ILayer"); - TestLayerPresent(_staticLayers, newLayer); + TestLayerPresent(_variableLayers, newLayer); base.OnAddingNew(e); } @@ -122,30 +114,45 @@ private static void TestLayerPresent(IEnumerable layers, ILayer newLayer if (comparison == 0) throw new DuplicateLayerException(newLayer.LayerName); } - + } - private static void OnRequery(object obj) + private void OnRequery(object obj) { + // if pan/zoom operation in progress then retry on next _timer.Elapsed if (Pause) return; + + // check for race condition when timer has been stopped while event has just been submitted on threadpool.QueueUserWorkItem + if (!_timer.Enabled) return; + + _timer.Stop(); + if (VariableLayerCollectionRequery != null) VariableLayerCollectionRequery(null, EventArgs.Empty); + } /// /// Gets/sets the interval in which to update layers /// - public static double Interval + public double Interval { get { return _timer.Interval; } - set { _timer.Interval = value; } + set + { + // map sets Interval == 0 when disposing, to prevent race condition + if (value <= 0) + _timer.Stop(); + else + _timer.Interval = value; + } } - private static bool _pause; + private bool _pause; /// /// Gets/Sets whether this collection should currently be updated or not /// - public static bool Pause + public bool Pause { get { return _pause; } set { _pause = value; } diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index a1479fb5..de565e21 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -597,7 +597,7 @@ public void RenderMap(Graphics g) throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); //Pauses the timer for VariableLayer - VariableLayerCollection.Pause = true; + _variableLayers.Pause = true; if ((Layers == null || Layers.Count == 0) && (BackgroundLayer == null || BackgroundLayer.Count == 0) && (_variableLayers == null || _variableLayers.Count == 0)) throw new InvalidOperationException("No layers to render"); @@ -685,7 +685,7 @@ public void RenderMap(Graphics g) mapDecoration.Render(g, this); } //Resets the timer for VariableLayer - VariableLayerCollection.Pause = false; + _variableLayers.Pause = false; OnMapRendered(g); } @@ -783,7 +783,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool if (g == null) throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); - VariableLayerCollection.Pause = true; + _variableLayers.Pause = true; LayerCollection lc = null; switch (layerCollectionType) @@ -850,7 +850,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool - VariableLayerCollection.Pause = false; + _variableLayers.Pause = false; } From 1f432e5920fb82a9fac4d9d927dac62b0768018e Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Wed, 31 May 2017 15:10:06 +0200 Subject: [PATCH 022/186] Reverted to ProjNET4GeoAPI 1.3.2-Pre1 because 1.3.2 is not released yet --- Examples/DemoWebSite/packages.config | 2 +- Examples/DemoWinForm/DemoWinForm.csproj | 4 ++-- Examples/DemoWinForm/packages.config | 2 +- Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj | 4 ++-- Examples/ExampleCodeSnippets/packages.config | 2 +- Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj | 4 ++-- Examples/SharpMap.Demo.Wms/packages.config | 2 +- Examples/WPFSamples/WPFSamples.csproj | 4 ++-- Examples/WPFSamples/packages.config | 2 +- Examples/WinFormSamples/WinFormSamples.csproj | 4 ++-- Examples/WinFormSamples/packages.config | 2 +- .../SharpMap.Data.Providers.Kml.csproj | 4 ++-- SharpMap.Data.Providers.Kml/packages.config | 2 +- SharpMap.Extensions/SharpMap.Extensions.csproj | 4 ++-- SharpMap.Extensions/packages.config | 2 +- SharpMap.UI/SharpMap.UI.csproj | 4 ++-- SharpMap.UI/packages.config | 2 +- UnitTests/UnitTests.csproj | 4 ++-- UnitTests/packages.config | 2 +- 19 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Examples/DemoWebSite/packages.config b/Examples/DemoWebSite/packages.config index cce97813..fe953f8f 100644 --- a/Examples/DemoWebSite/packages.config +++ b/Examples/DemoWebSite/packages.config @@ -6,5 +6,5 @@ - + \ No newline at end of file diff --git a/Examples/DemoWinForm/DemoWinForm.csproj b/Examples/DemoWinForm/DemoWinForm.csproj index 511fcc1d..9f038375 100644 --- a/Examples/DemoWinForm/DemoWinForm.csproj +++ b/Examples/DemoWinForm/DemoWinForm.csproj @@ -75,8 +75,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/Examples/DemoWinForm/packages.config b/Examples/DemoWinForm/packages.config index dd9dd726..b109dde2 100644 --- a/Examples/DemoWinForm/packages.config +++ b/Examples/DemoWinForm/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj index 24bed397..21cfe2e3 100644 --- a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj +++ b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj @@ -88,8 +88,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/Examples/ExampleCodeSnippets/packages.config b/Examples/ExampleCodeSnippets/packages.config index 371e6974..66489c57 100644 --- a/Examples/ExampleCodeSnippets/packages.config +++ b/Examples/ExampleCodeSnippets/packages.config @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj index 6e47db0b..9c878694 100644 --- a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj +++ b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj @@ -65,8 +65,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/Examples/SharpMap.Demo.Wms/packages.config b/Examples/SharpMap.Demo.Wms/packages.config index ed3d4dc2..ef6595c0 100644 --- a/Examples/SharpMap.Demo.Wms/packages.config +++ b/Examples/SharpMap.Demo.Wms/packages.config @@ -7,6 +7,6 @@ - + \ No newline at end of file diff --git a/Examples/WPFSamples/WPFSamples.csproj b/Examples/WPFSamples/WPFSamples.csproj index 9393b344..ca1c5d48 100644 --- a/Examples/WPFSamples/WPFSamples.csproj +++ b/Examples/WPFSamples/WPFSamples.csproj @@ -44,8 +44,8 @@ ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/Examples/WPFSamples/packages.config b/Examples/WPFSamples/packages.config index 938fa645..b86b1c89 100644 --- a/Examples/WPFSamples/packages.config +++ b/Examples/WPFSamples/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index a1349af6..7836c0ec 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -137,8 +137,8 @@ ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index 450df87e..10f7fdfe 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj b/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj index cf2bb778..5d7cb068 100644 --- a/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj +++ b/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj @@ -48,8 +48,8 @@ ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/SharpMap.Data.Providers.Kml/packages.config b/SharpMap.Data.Providers.Kml/packages.config index 8004bb2b..d798202f 100644 --- a/SharpMap.Data.Providers.Kml/packages.config +++ b/SharpMap.Data.Providers.Kml/packages.config @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/SharpMap.Extensions/SharpMap.Extensions.csproj b/SharpMap.Extensions/SharpMap.Extensions.csproj index f220d09e..4d1bbf9b 100644 --- a/SharpMap.Extensions/SharpMap.Extensions.csproj +++ b/SharpMap.Extensions/SharpMap.Extensions.csproj @@ -116,8 +116,8 @@ ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/SharpMap.Extensions/packages.config b/SharpMap.Extensions/packages.config index df81c8a5..1feb96da 100644 --- a/SharpMap.Extensions/packages.config +++ b/SharpMap.Extensions/packages.config @@ -9,6 +9,6 @@ - + \ No newline at end of file diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index b5209ed5..09eb4205 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -61,8 +61,8 @@ ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/SharpMap.UI/packages.config b/SharpMap.UI/packages.config index fa332707..583aef93 100644 --- a/SharpMap.UI/packages.config +++ b/SharpMap.UI/packages.config @@ -4,6 +4,6 @@ - + \ No newline at end of file diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index b96c0cce..9fe37c36 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -136,8 +136,8 @@ ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll True - - ..\packages\ProjNET4GeoAPI.1.3.2\lib\net40-client\ProjNet.dll + + ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll True diff --git a/UnitTests/packages.config b/UnitTests/packages.config index 952b487c..348bf37e 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -10,7 +10,7 @@ - + From 5289522c26e77584eaa95428c1bd2202ff18a340 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Thu, 1 Jun 2017 17:46:13 +0200 Subject: [PATCH 023/186] fixed NullReferenceException when setting CoordinateTransformation --- SharpMap/Layers/Layer.cs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/SharpMap/Layers/Layer.cs b/SharpMap/Layers/Layer.cs index dc836541..91ea4f13 100644 --- a/SharpMap/Layers/Layer.cs +++ b/SharpMap/Layers/Layer.cs @@ -61,7 +61,8 @@ public abstract partial class Layer : DisposableObject, ILayer protected virtual void OnSridChanged(EventArgs eventArgs) { _sourceFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); - _coordinateTransform = _reverseCoordinateTransform = null; + if (!_shouldNotResetCt) + _coordinateTransform = _reverseCoordinateTransform = null; var handler = SRIDChanged; if (handler!= null) handler(this, eventArgs); } @@ -108,7 +109,8 @@ protected virtual void OnLayerNameChanged(EventArgs eventArgs) private IStyle _style; private int _srid = -1; private int? _targetSrid; - + [field:NonSerialized] + private bool _shouldNotResetCt; // ReSharper disable PublicConstructorInAbstractClass /// /// Creates an instance of this class using the given Style @@ -181,8 +183,18 @@ protected virtual void OnCoordinateTransformationChanged(EventArgs e) if (CoordinateTransformation != null) { - SRID = Convert.ToInt32(CoordinateTransformation.SourceCS.AuthorityCode); - TargetSRID = Convert.ToInt32(CoordinateTransformation.TargetCS.AuthorityCode); + // we don't want that by setting SRID we get the CoordinateTransformation resetted + _shouldNotResetCt = true; + try + { + SRID = Convert.ToInt32(CoordinateTransformation.SourceCS.AuthorityCode); + TargetSRID = Convert.ToInt32(CoordinateTransformation.TargetCS.AuthorityCode); + } + finally + { + _shouldNotResetCt = false; + } + } if (CoordinateTransformationChanged != null) From a783cf6af6d9a4662e134e4935f9bd126fabd0a5 Mon Sep 17 00:00:00 2001 From: joriswit Date: Tue, 11 Jul 2017 21:56:27 +0200 Subject: [PATCH 024/186] WFS fixes: - Namespace URL was not correctly URL-encoded - In WFS 1.1.0, SRS URL component is named SRSNAME --- SharpMap/Utilities/Wfs/WFS_1_0_0_TextResources.cs | 3 ++- SharpMap/Utilities/Wfs/WFS_1_1_0_TextResources.cs | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/SharpMap/Utilities/Wfs/WFS_1_0_0_TextResources.cs b/SharpMap/Utilities/Wfs/WFS_1_0_0_TextResources.cs index 97417fa6..250b7193 100644 --- a/SharpMap/Utilities/Wfs/WFS_1_0_0_TextResources.cs +++ b/SharpMap/Utilities/Wfs/WFS_1_0_0_TextResources.cs @@ -1,6 +1,7 @@ // WFS provider by Peter Robineau (peter.robineau@gmx.at) // This file can be redistributed and/or modified under the terms of the GNU Lesser General Public License. +using System; using System.IO; using System.Text; using System.Xml; @@ -69,7 +70,7 @@ public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, Envelope StringBuilder filterBuilder = new StringBuilder(); // &filter= - filterBuilder.Append("&filter=%3CFilter%20xmlns=%22" + NSOGC + "%22%20xmlns:gml=%22" + NSGML + + filterBuilder.Append("&filter=%3CFilter%20xmlns=%22" + Uri.EscapeDataString(NSOGC) + "%22%20xmlns:gml=%22" + Uri.EscapeDataString(NSGML) + "%22%3E"); // filterBuilder.Append("%3CBBOX%3E"); diff --git a/SharpMap/Utilities/Wfs/WFS_1_1_0_TextResources.cs b/SharpMap/Utilities/Wfs/WFS_1_1_0_TextResources.cs index 8216b033..b0d554c6 100644 --- a/SharpMap/Utilities/Wfs/WFS_1_1_0_TextResources.cs +++ b/SharpMap/Utilities/Wfs/WFS_1_1_0_TextResources.cs @@ -1,6 +1,7 @@ // WFS provider by Peter Robineau (peter.robineau@gmx.at) // This file can be redistributed and/or modified under the terms of the GNU Lesser General Public License. +using System; using System.IO; using System.Text; using System.Xml; @@ -37,7 +38,7 @@ public string GetCapabilitiesRequest() public string DescribeFeatureTypeRequest(string featureTypeName) { return "?SERVICE=WFS&Version=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=" + featureTypeName + - "&NAMESPACE=xmlns(app=http://www.deegree.org/app)"; + "&NAMESPACE=xmlns(app=http://www.deegree.org/app)"; // TODO Hardcoded WFS feature type namespace } #endregion @@ -70,11 +71,11 @@ public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, Envelope } StringBuilder filterBuilder = new StringBuilder(); - filterBuilder.Append("&FILTER=%3CFilter%20xmlns=%22" + NSOGC + "%22%20xmlns:gml=%22" + NSGML + "%22"); + filterBuilder.Append("&FILTER=%3CFilter%20xmlns=%22" + Uri.EscapeDataString(NSOGC) + "%22%20xmlns:gml=%22" + Uri.EscapeDataString(NSGML) + "%22"); if (!string.IsNullOrEmpty(featureTypeInfo.Prefix)) { filterBuilder.Append("%20xmlns:" + featureTypeInfo.Prefix + "=%22" + - featureTypeInfo.FeatureTypeNamespace + "%22"); + Uri.EscapeDataString(featureTypeInfo.FeatureTypeNamespace) + "%22"); //added by PDD to get it to work for deegree default sample } filterBuilder.Append("%3E"); @@ -112,12 +113,12 @@ public string GetFeatureGETRequest(WfsFeatureTypeInfo featureTypeInfo, Envelope { //TODO: reorganize: this is not a part of the filter and should be somewhere else. PDD. filterBuilder.Append("&NAMESPACE=xmlns(" + featureTypeInfo.Prefix + "=" + - featureTypeInfo.FeatureTypeNamespace + ")"); + Uri.EscapeDataString(featureTypeInfo.FeatureTypeNamespace) + ")"); } return "?SERVICE=WFS&Version=1.1.0&REQUEST=GetFeature&TYPENAME=" + qualification + featureTypeInfo.Name + (loadAllElements ? "" : "&PROPERTYNAME=" + qualification + featureTypeInfo.Geometry._GeometryName) + - "&SRS=" + featureTypeInfo.SRID + filterBuilder; + "&SRSNAME=EPSG:" + featureTypeInfo.SRID + filterBuilder; } /// From 3333e0c9edf3ab05a354174ed99f22d6942bff60 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Thu, 20 Jul 2017 07:33:00 +0700 Subject: [PATCH 025/186] GeometryFeatureProvider: Bug fix when working with user-defined OID --- .gitignore | 1 + SharpMap/Data/Providers/GeometryFeatureProvider.cs | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 01cf4e89..076c0fb8 100644 --- a/.gitignore +++ b/.gitignore @@ -202,3 +202,4 @@ I[V|v][V|v]*/ I[V|v][V|v]*.* *I[V|v][V|v]/ *I[V|v][V|v].* +/SharpMap/SharpMap.png diff --git a/SharpMap/Data/Providers/GeometryFeatureProvider.cs b/SharpMap/Data/Providers/GeometryFeatureProvider.cs index 239b95cf..6418051c 100644 --- a/SharpMap/Data/Providers/GeometryFeatureProvider.cs +++ b/SharpMap/Data/Providers/GeometryFeatureProvider.cs @@ -227,7 +227,7 @@ private IEnumerable> EnumerateFeatures(Envelo if (_oid == -1) yield return new KeyValuePair(id, feature); else - yield return new KeyValuePair((uint)feature[_oid], feature); + yield return new KeyValuePair((uint)(int)feature[_oid], feature); } id++; } @@ -241,7 +241,7 @@ private IEnumerable> EnumerateFeatures(Envelo if (_oid == -1) yield return new KeyValuePair(id, feature); else - yield return new KeyValuePair((uint)feature[_oid], feature); + yield return new KeyValuePair((uint)(int)feature[_oid], feature); } id++; } @@ -277,7 +277,7 @@ public IGeometry GetGeometryByID(uint oid) else { DataRow dr; - dr = _features.Rows.Find(_oid); + dr = _features.Rows.Find(oid); if (dr != null) return ((FeatureDataRow)dr).Geometry; else From 65c06d9950683fd705aa04807e2b166a3ee5223a Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Thu, 21 Sep 2017 16:25:25 +0200 Subject: [PATCH 026/186] issue #65: CustomTool now becomes enabled when activated --- SharpMap.UI/Forms/MapBox.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index 69d1995d..89449089 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -718,6 +718,8 @@ protected virtual void OnActiveToolChanging(Tools toolPre, Tools toolNew, Cancel /// The tool protected virtual void OnActiveToolChanged(Tools activeTool) { + if (CustomTool != null) + CustomTool.Enabled = true; var handler = ActiveToolChanged; if (handler != null) handler(activeTool); From 51dbf654a40c9982918aafd995f81d8e2d801a77 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Thu, 21 Sep 2017 22:25:22 +0700 Subject: [PATCH 027/186] Final updates to GeometryFeatureProvider: 1 - GetGeometriesInView handle null geometries 2 - EnumerateFeatures handle null geometries simplify handling of FeatureDelegate change casting of OID from (uint)(int) to generic Convert.ToUint32 3 - GetFeatures udpate comments Find by RowNum or PrimaryKey depending on OID --- .../Data/Providers/GeometryFeatureProvider.cs | 76 +++++++++++-------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/SharpMap/Data/Providers/GeometryFeatureProvider.cs b/SharpMap/Data/Providers/GeometryFeatureProvider.cs index 6418051c..9cc26ab2 100644 --- a/SharpMap/Data/Providers/GeometryFeatureProvider.cs +++ b/SharpMap/Data/Providers/GeometryFeatureProvider.cs @@ -202,7 +202,7 @@ public Collection GetGeometriesInView(Envelope bbox) lock (_features.Rows.SyncRoot) { foreach (FeatureDataRow fdr in _features.Rows) - if (!fdr.Geometry.IsEmpty) + if (fdr.Geometry != null && !fdr.Geometry.IsEmpty) if (FilterDelegate == null || FilterDelegate(fdr)) { if (bbox.Intersects(fdr.Geometry.EnvelopeInternal)) @@ -217,34 +217,26 @@ private IEnumerable> EnumerateFeatures(Envelo lock (_features.Rows.SyncRoot) { uint id = 0; - if (FilterDelegate == null) - foreach (FeatureDataRow feature in _features.Rows) - { - var geom = feature.Geometry; - var testBox = geom != null ? geom.EnvelopeInternal : new Envelope(bbox); - if (bbox.Intersects(testBox)) - { - if (_oid == -1) - yield return new KeyValuePair(id, feature); - else - yield return new KeyValuePair((uint)(int)feature[_oid], feature); - } - id++; - } - else - foreach (FeatureDataRow feature in _features.Rows) + foreach (FeatureDataRow feature in _features.Rows) + { + var geom = feature.Geometry; + if (geom != null && !geom.IsEmpty) { - var geom = feature.Geometry; - var testBox = geom != null ? geom.EnvelopeInternal : new Envelope(bbox); - if (bbox.Intersects(testBox) && FilterDelegate(feature)) + if (bbox.Intersects(geom.EnvelopeInternal) && (FilterDelegate == null || FilterDelegate(feature))) { if (_oid == -1) + { yield return new KeyValuePair(id, feature); + id++; + } else - yield return new KeyValuePair((uint)(int)feature[_oid], feature); + { + yield return new KeyValuePair(Convert.ToUInt32(feature[_oid]), feature); + } + } - id++; } + } } } @@ -355,23 +347,45 @@ public int GetFeatureCount() /// /// Gets a specific feature from the data source by its /// - /// The id of the row + /// The row index or OID (if primary key enabled) of the feature /// A feature data row public FeatureDataRow GetFeature(uint rowId) { lock (_features.Rows.SyncRoot) { - if (rowId >= _features.Rows.Count) - { - return null; - } - else if (FilterDelegate != null && FilterDelegate(_features[(int)rowId])) + if (_oid == -1) { - return _features[(int)rowId]; + // find by row number + if (rowId >= _features.Rows.Count) + { + return null; + } + else if (FilterDelegate != null && FilterDelegate(_features[(int)rowId])) + { + return _features[(int)rowId]; + } + else if (rowId < _features.Rows.Count) + { + return _features[(int)rowId]; + } } - else if (rowId < _features.Rows.Count) + else { - return _features[(int)rowId]; + // find by primary key + DataRow dr; + dr = _features.Rows.Find(rowId); + if (dr == null) + { + return null; + } + else if (FilterDelegate != null && FilterDelegate((FeatureDataRow)dr)) + { + return (FeatureDataRow)dr; + } + else + { + return (FeatureDataRow)dr; + } } } From 50b411b861f0877ea6d16a384db5bb325b2eac5e Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Tue, 19 Sep 2017 17:23:38 +0200 Subject: [PATCH 028/186] avoided an internal exception --- SharpMap.UI/Forms/MiniMapControl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharpMap.UI/Forms/MiniMapControl.cs b/SharpMap.UI/Forms/MiniMapControl.cs index d415361e..6feb6670 100644 --- a/SharpMap.UI/Forms/MiniMapControl.cs +++ b/SharpMap.UI/Forms/MiniMapControl.cs @@ -768,7 +768,7 @@ private Tuple GenerateMap(object state) Image img = null; Rectangle frame; - if (map.Layers.Count > 0) + if (map.Layers.Count > 0 && Height > 0 && Width > 0) { var originalCenter = map.Center; var originalWidth = map.Zoom; From 641d43ec2bb238dba21c26508ee4beb4e81b94dc Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Mon, 22 Jan 2018 15:49:28 +0100 Subject: [PATCH 029/186] Update README.md Added gitter badge, rearranged layout --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 93a5bec2..87b3c74d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,14 @@ # SharpMap -An easy-to-use mapping library for use in web and desktop applications -[![Stories in Ready](https://badge.waffle.io/SharpMap/SharpMap.png?label=ready&title=Ready)](http://waffle.io/SharpMap/SharpMap) +An easy-to-use mapping library for use in web and desktop applications +What are we up to: [![Stories in Ready](https://badge.waffle.io/SharpMap/SharpMap.png?label=ready&title=Ready)](http://waffle.io/SharpMap/SharpMap) + +## Talk... +Join the [![Gitter](https://img.shields.io/gitter/room/TechnologyAdvice/Stardust.svg)](https://gitter.im/SharpMap) about SharpMap. + +## Status Travis build status [![Build Status](https://travis-ci.org/SharpMap/SharpMap.svg?branch=Branches%2F1.0)](https://travis-ci.org/SharpMap/SharpMap) TeamCity build status: [![Build Status](https://img.shields.io/teamcity/codebetter/bt975.svg)](http://teamcity.codebetter.com/viewType.html?buildTypeId=bt975) Teamcity coverage status: [![Coverage Status](https://img.shields.io/teamcity/coverage/bt976.svg)](http://teamcity.codebetter.com/viewType.html?buildTypeId=bt976) - From c6b5122d111ba65af9849f940026c05894e7ddaf Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Tue, 23 Jan 2018 08:37:25 +0100 Subject: [PATCH 030/186] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87b3c74d..e0b3ffd4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ An easy-to-use mapping library for use in web and desktop applications What are we up to: [![Stories in Ready](https://badge.waffle.io/SharpMap/SharpMap.png?label=ready&title=Ready)](http://waffle.io/SharpMap/SharpMap) ## Talk... -Join the [![Gitter](https://img.shields.io/gitter/room/TechnologyAdvice/Stardust.svg)](https://gitter.im/SharpMap) about SharpMap. +Join the [![Gitter](https://img.shields.io/gitter/room/TechnologyAdvice/Stardust.svg)](https://gitter.im/SharpMap/General) about SharpMap. ## Status Travis build status [![Build Status](https://travis-ci.org/SharpMap/SharpMap.svg?branch=Branches%2F1.0)](https://travis-ci.org/SharpMap/SharpMap) From 6cec625123f1027f5816a2bb7471f49c5f0def09 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Mon, 5 Feb 2018 10:04:25 +0100 Subject: [PATCH 031/186] Factored out map update logic on the user interface Extracted interface for discussing purposes --- .../ImageGenerator/IMapBoxImageGenerator.cs | 58 ++ .../ImageGenerator/LegacyMapImageRenderer.cs | 608 ++++++++++++ SharpMap.UI/Forms/MapBox.cs | 919 +++++++++--------- SharpMap.UI/SharpMap.UI.csproj | 2 + SharpMap.UI/SharpMap.UI.csproj.DotSettings | 2 + 5 files changed, 1139 insertions(+), 450 deletions(-) create mode 100644 SharpMap.UI/Forms/ImageGenerator/IMapBoxImageGenerator.cs create mode 100644 SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs create mode 100644 SharpMap.UI/SharpMap.UI.csproj.DotSettings diff --git a/SharpMap.UI/Forms/ImageGenerator/IMapBoxImageGenerator.cs b/SharpMap.UI/Forms/ImageGenerator/IMapBoxImageGenerator.cs new file mode 100644 index 00000000..ec83dcbd --- /dev/null +++ b/SharpMap.UI/Forms/ImageGenerator/IMapBoxImageGenerator.cs @@ -0,0 +1,58 @@ +/* + * Copyright © 2018 - Felix Obermaier, Ingenieurgruppe IVV GmbH & Co. KG + * + * This file is part of SharpMap.UI. + * + * SharpMap.UI is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * SharpMap.UI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public License + * along with SharpMap; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +using System; +using System.Drawing; +using System.Threading.Tasks; +using GeoAPI.Geometries; + +namespace SharpMap.Forms.ImageGenerator +{ + /// + /// Interface for map image generators that can be used with + /// + public interface IMapBoxImageGenerator : IDisposable + { + /// + /// Gets a value representing the complete rendered map image + /// + Image Image { get; } + + /// + /// Gets the current image value as it is now + /// + Image ImageValue { get; } + + /// + /// Gets the location and extent of the map image. + /// + /// Implementation should always return a copy of the actual value + Envelope ImageEnvelope { get; } + + /// + /// Gets a value indicating that this object is disposed + /// + bool IsDisposed { get; } + + // ToDo: Think of better name + // Note this is only called with forceRefresh = true, so we could expose only UpdateImage without any parameters + Task Generate(); + } +} diff --git a/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs b/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs new file mode 100644 index 00000000..1eda9b1b --- /dev/null +++ b/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs @@ -0,0 +1,608 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Common.Logging; +using GeoAPI.Geometries; +using SharpMap.Layers; + +namespace SharpMap.Forms.ImageGenerator +{ + + public class LegacyMapBoxImageGenerator : IMapBoxImageGenerator + { + private static readonly ILog _logger = LogManager.GetLogger(); + + private readonly MapBox _mapBox; + private readonly ProgressBar _progressBar; + + private Map _map; + + private volatile bool _isDisposed; + //private bool _isRefreshing; + private readonly object _staticImagesLocker = new object(); + private readonly object _backgroundImagesLocker = new object(); + private readonly object _paintImageLocker = new object(); + + private Image _image = new Bitmap(1, 1); + private uint _idImageGeneration; + private Bitmap _imageBackground = new Bitmap(1, 1); + private Bitmap _imageStatic = new Bitmap(1, 1); + private Bitmap _imageVariable = new Bitmap(1, 1); + private Envelope _imageEnvelope = new Envelope(0, 1, 0, 1); + + private uint _imageGeneration; + + /// + /// Creates an instance for this class + /// + /// The map box + /// A progress bar + public LegacyMapBoxImageGenerator(MapBox mapBox, ProgressBar progressBar) + { + _progressBar = progressBar; + _mapBox = mapBox; + WireMapBox(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing && !_isDisposed) + { + UnwireMap(); + + _imageBackground?.Dispose(); + _imageBackground = null; + _imageStatic?.Dispose(); + _imageStatic = null; + _imageVariable?.Dispose(); + _imageVariable = null; + _image?.Dispose(); + _image = null; + + _imageEnvelope = new Envelope(); + } + _isDisposed = true; + } + + /// + /// Gets access to the map + /// + private MapBox MapBox + { + get { return _mapBox; } + } + + + + + public Image Image + { + get + { + GetImagesAsyncEnd(null); + return ImageValue; + } + } + + public Image ImageValue + { + get + { + Image res; + lock (_paintImageLocker) + res = _image; + return res; + } + } + + public bool IsDisposed { get => _isDisposed; } + + public Envelope ImageEnvelope { get => new Envelope(_imageEnvelope); } + + #region Necessary event handlers + + private void HandleMapChanged(object sender, EventArgs e) + { + UnwireMap(); + _map = _mapBox.Map; + WireMap(); + } + void HandleMapRefreshNeeded(object sender, EventArgs e) + { + UpdateImage(true, new Rectangle(Point.Empty, MapBox.Size)); + } + + + private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, + int sourceHeight, ImageAttributes imageAttributes) + { + lock (_backgroundImagesLocker) + { + try + { + var min = Point.Round(_map.WorldToImage(box.Min())); + var max = Point.Round(_map.WorldToImage(box.Max())); + + if (MapBox.IsDisposed == false && _isDisposed == false) + { + var rect = new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)); + using (var g = Graphics.FromImage(_imageBackground)) + { + + g.DrawImage(bm, rect, 0, 0, + sourceWidth, sourceHeight, + GraphicsUnit.Pixel, + imageAttributes); + + } + + UpdateImage(false, rect); + } + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + //this can be a GDI+ Hell Exception... + } + + } + + } + + /// + /// Handles need to requery of variable layers + /// + /// + /// + private void HandleVariableLayersRequery(object sender, EventArgs e) + { + if (_mapBox.IsDisposed || _isDisposed) + return; + + Image oldRef; + lock (_mapBox.MapLocker) + { + if (_mapBox.Dragging) return; + oldRef = _imageVariable; + _imageVariable = GetMap(_map, _map.VariableLayers, LayerCollectionType.Variable, _map.Envelope); + } + + var rect = new Rectangle(Point.Empty, _mapBox.Size); + UpdateImage(false, rect); + if (oldRef != null) + oldRef.Dispose(); + + _mapBox.Invalidate(rect); + _mapBox.Update(); + + //// TODO Why? + //Application.DoEvents(); + } + + + #endregion + + #region Event (un)subscribe functions + + private void WireMapBox() + { + _mapBox.MapChanged += HandleMapChanged; + _map = _mapBox.Map; + WireMap(); + } + + private void WireMap() + { + if (_map == null) + return; + + _map.MapNewTileAvaliable += HandleMapNewTileAvaliable; + _map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + _map.RefreshNeeded += HandleMapRefreshNeeded; + } + + private void UnwireMap() + { + if (_map == null) return; + _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + _map.RefreshNeeded -= HandleMapRefreshNeeded; + + _map = null; + } + + #endregion + + + private Bitmap GetMap(Map map, LayerCollection layers, LayerCollectionType layerCollectionType, + Envelope extent) + { + try + { + var width = _mapBox.Width; + var height = _mapBox.Height; + + if ((layers == null || layers.Count == 0 || width <= 0 || height <= 0)) + { + if (layerCollectionType == LayerCollectionType.Background) + return new Bitmap(1, 1); + return null; + } + + var retval = new Bitmap(width, height, PixelFormat.Format32bppArgb); + + using (var g = Graphics.FromImage(retval)) + { + g.Clear(Color.Transparent); + map.RenderMap(g, layerCollectionType, false, true); + } + + /*if (layerCollectionType == LayerCollectionType.Variable) + retval.MakeTransparent(_map.BackColor); + else if (layerCollectionType == LayerCollectionType.Static && map.BackgroundLayer.Count > 0) + retval.MakeTransparent(_map.BackColor);*/ + return retval; + } + catch (Exception ee) + { + _logger.Error("Error while rendering map", ee); + + if (layerCollectionType == LayerCollectionType.Background) + return new Bitmap(1, 1); + return null; + } + } + + private void GetImagesAsync(Envelope extent, uint imageGeneration) + { + lock (_mapBox.MapLocker) + { + if (_isDisposed) + return; + + if (imageGeneration < _imageGeneration) + { + /*we're to old*/ + return; + } + var safeMap = _map.Clone(); + _imageVariable = GetMap(safeMap, _map.VariableLayers, LayerCollectionType.Variable, extent); + + lock (_staticImagesLocker) + { + _imageStatic = GetMap(safeMap, _map.Layers, LayerCollectionType.Static, extent); + } + lock (_backgroundImagesLocker) + { + _imageBackground = GetMap(safeMap, _map.BackgroundLayer, LayerCollectionType.Background, extent); + } + } + } + + private class GetImageEndResult + { + public MapBox.Tools? Tool { get; set; } + public Envelope bbox { get; set; } + public uint Generation { get; set; } + public Rectangle UpdateArea { get; set; } + +#if DEBUG + public Stopwatch Watch { get; set; } +#endif + } + + private void GetImagesAsyncEnd(GetImageEndResult res) + { + // draw only if generation is larger than the current, else we have aldready drawn something newer + // we must to check also IsHandleCreated because during disposal, the handle of the parent is detroyed sooner than progress bar's handle, + // this leads to cross thread operation and exception because InvokeRequired returns false, but for the progress bar it is true. + if (res == null || res.Generation < _imageGeneration || _isDisposed || !_mapBox.IsHandleCreated) + return; + + + if (_logger.IsDebugEnabled) + _logger.DebugFormat("{0} - {1} / {2}", res.Generation, res.bbox, res.UpdateArea); + + + if ((_mapBox.SetToolsNoneWhileRedrawing|| _mapBox.ShowProgressUpdate) && _mapBox.InvokeRequired) + { + try + { + _mapBox.BeginInvoke(new MethodInvoker(() => GetImagesAsyncEnd(res))); + + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + } + else + { + try + { + var oldRef = _image; + var width = _mapBox.Width; + var height = _mapBox.Height; + if (width > 0 && height > 0) + { + + + /* + Bitmap bmp = new Bitmap(width, height); + using (var g = Graphics.FromImage(bmp)) + { + g.Clear(_map.BackColor); + lock (_backgroundImagesLocker) + { + //Draws the background Image + if (_imageBackground != null) + { + try + { + g.DrawImageUnscaled(_imageBackground, 0, 0); + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + } + } + + //Draws the static images + if (_staticImagesLocker != null) + { + try + { + if (_imageStatic != null) + { + g.DrawImageUnscaled(_imageStatic, 0, 0); + } + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + + } + + //Draws the variable Images + if (_imageVariable != null) + { + try + { + g.DrawImageUnscaled(_imageVariable, 0, 0); + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + } + + g.Dispose(); + } + */ + + + var bmp = MergeImages(res.Generation, res.UpdateArea); + + lock (_paintImageLocker) + { + if (bmp != _image) + { + _image = bmp; + _imageEnvelope = res.bbox; + _idImageGeneration = res.Generation; + } + } + } + + if (res.Tool.HasValue) + { + if (_mapBox.SetToolsNoneWhileRedrawing) + _mapBox.ActiveTool = res.Tool.Value; + + _mapBox.ClearDrag(); + //_isRefreshing = false; + + if (_mapBox.SetToolsNoneWhileRedrawing) + _mapBox.Enabled = true; + + if (_mapBox.ShowProgressUpdate) + { + _progressBar.Enabled = false; + _progressBar.Visible = false; + } + } + + lock (_paintImageLocker) + { + if (oldRef != null && oldRef != _image) + oldRef.Dispose(); + } + + _mapBox.Invalidate(res.UpdateArea); + _mapBox.Invoke(new MethodInvoker(_mapBox.Update)); + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + +#if DEBUG + if (res.Watch != null) + { res.Watch.Stop(); + _mapBox.LastRefreshTime = res.Watch.Elapsed; + } +#endif + + try + { + _mapBox.OnMapRefreshed(EventArgs.Empty); + /* + if (_mapBox.MapRefreshed != null) + { + MapRefreshed(this, null); + } +*/ + } + catch (Exception ee) + { + //Trap errors that occured when calling the eventhandlers + _logger.Warn("Exception while calling eventhandler", ee); + } + } + } + + private Bitmap MergeImages(uint generation, Rectangle rectangle) + { + var res = generation == _idImageGeneration + ? (Bitmap) _image + : new Bitmap(MapBox.Size.Width, MapBox.Size.Height); + + var counter = 0; + while (true) + { + try + { + counter++; + using (var g = Graphics.FromImage(res)) + { + lock (_backgroundImagesLocker) + TryDrawImage(g, _imageBackground, rectangle); + lock (_staticImagesLocker) + TryDrawImage(g, _imageStatic, rectangle); + TryDrawImage(g, _imageVariable, rectangle); + } + + break; + } + catch (Exception e) + { + _logger.Warn($"{counter}. merge at {rectangle} failed."); + if (counter == 3) + { + _logger.Warn("Quit trying to merge."); + break; + } + } + + Thread.Sleep(25); + } + + return res; + } + + private static void TryDrawImage(Graphics g, Image image, Rectangle rect) + { + if (image == null) + return; + + try + { + g.DrawImage(image, rect, rect, GraphicsUnit.Pixel); + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + } + + /// + /// + /// + /// + public Task Generate() + { + var res = new Task(() => UpdateImage(true, new Rectangle(Point.Empty, MapBox.Size))); + res.Start(); + return res; + } + + private void UpdateImage(bool forceRefresh, Rectangle updateArea) + { + if (_isDisposed || _mapBox.IsDisposed) + return; + +#if DEBUG + var watch = new Stopwatch(); + watch.Start(); +#endif + + + var width = _mapBox.Width; + var height = _mapBox.Height; + if (((_imageStatic == null && _imageVariable == null && _imageBackground == null) && !forceRefresh) || + (width == 0 || height == 0)) return; + + Envelope bbox = _map.Envelope; + if (forceRefresh) // && _isRefreshing == false) + { + //_isRefreshing = true; + MapBox.Tools oldTool = _mapBox.ActiveTool; + if (_mapBox.SetToolsNoneWhileRedrawing) + { + _mapBox.ActiveTool = MapBox.Tools.None; + _mapBox.Enabled = false; + } + + if (_mapBox.ShowProgressUpdate) + { + if (_mapBox.InvokeRequired) + { + _progressBar.BeginInvoke(new Action(p => + { + p.Visible = true; + p.Enabled = true; + }), _progressBar); + } + else + { + _progressBar.Visible = true; + _progressBar.Enabled = true; + } + } + + // Assert we never run into overflow errors + if (_imageGeneration == uint.MaxValue) + _imageGeneration = 0; + + var generation = ++_imageGeneration; + ThreadPool.QueueUserWorkItem( + delegate + { + GetImagesAsync(bbox, generation); + GetImagesAsyncEnd(new GetImageEndResult + { + Tool = oldTool, bbox = bbox, Generation = generation, UpdateArea = updateArea +#if DEBUG + , Watch = watch +#endif + }); + }); + } + else + { + GetImagesAsyncEnd(new GetImageEndResult + { + Tool = null, bbox = bbox, Generation = _imageGeneration, + UpdateArea = updateArea +#if DEBUG + , Watch = watch +#endif + }); + } + } + + } +} diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index b48ba980..8234861c 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -50,6 +50,7 @@ using System.Threading; using Common.Logging; using System.Collections.Generic; +using SharpMap.Forms.ImageGenerator; namespace SharpMap.Forms { @@ -356,6 +357,8 @@ public enum MapQueryType #endregion + private LegacyMapBoxImageGenerator _miRenderer; + private static int m_defaultColorIndex; private static readonly Color[] _defaultColors ={ @@ -390,22 +393,25 @@ public enum MapQueryType private int _queryLayerIndex; private Point _dragStartPoint; private Point _dragEndPoint; - private Bitmap _dragImage; + //private Bitmap _dragImage; private Rectangle _rectangle = Rectangle.Empty; private bool _dragging; private readonly SolidBrush _rectangleBrush = new SolidBrush(Color.FromArgb(210, 244, 244, 244)); private readonly Pen _rectanglePen = new Pen(Color.FromArgb(244, 244, 244), 1); private float _scaling; - private Image _image = new Bitmap(1, 1); - private Image _imageBackground = new Bitmap(1, 1); - private Image _imageStatic = new Bitmap(1, 1); - private Image _imageVariable = new Bitmap(1, 1); - private Envelope _imageEnvelope = new Envelope(0, 1, 0, 1); - private int _imageGeneration; + //private Image _image = new Bitmap(1, 1); + //private Image _imageBackground = new Bitmap(1, 1); + //private Image _imageStatic = new Bitmap(1, 1); + //private Image _imageVariable = new Bitmap(1, 1); + //private Envelope _imageEnvelope = new Envelope(0, 1, 0, 1); + //private int _imageGeneration; + + private readonly object _mapLocker = new object(); + private int _needToRefreshAfterWheel; private PreviewModes _previewMode; - private bool _isRefreshing; + //private bool _isRefreshing; private List _pointArray = new List(); private bool _showProgress; private bool _zoomToPointer = true; @@ -566,9 +572,9 @@ public Image Image { get { - - GetImagesAsyncEnd(null); - return _image; + return _miRenderer.Image; + //GetImagesAsyncEnd(null); + //return _image; } } @@ -771,23 +777,25 @@ public MapBox() SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); base.DoubleBuffered = true; - _map = new Map(ClientSize); - _map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; - _map.RefreshNeeded += HandleRefreshNeeded; - _map.MapNewTileAvaliable += HandleMapNewTileAvaliable; - - _activeTool = Tools.None; - LostFocus += HandleMapBoxLostFocus; + _map = new Map(ClientSize); + //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + //_map.RefreshNeeded += HandleRefreshNeeded; + //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; _progressBar = new ProgressBar - { - Style = ProgressBarStyle.Marquee, - Location = new Point(2, 2), - Size = new Size(50, 10) - }; + { + Style = ProgressBarStyle.Marquee, + Location = new Point(2, 2), + Size = new Size(50, 10) + }; Controls.Add(_progressBar); - _progressBar.Visible = false; + + _miRenderer = new LegacyMapBoxImageGenerator(this, _progressBar); + + _activeTool = Tools.None; + LostFocus += HandleMapBoxLostFocus; + _progressBar.Visible = ShowProgressUpdate; _mousePreviewFilter = new MouseWheelGrabber(this); Application.AddMessageFilter(_mousePreviewFilter); @@ -806,8 +814,6 @@ protected override void OnSizeChanged(EventArgs e) base.OnSizeChanged(e); } - private volatile bool _isDisposed; - /// /// Dispose method /// @@ -815,53 +821,54 @@ protected override void OnSizeChanged(EventArgs e) /// or the finalizer (false) protected override void Dispose(bool disposing) { - if (_isDisposed || IsDisposed) + if (_miRenderer.IsDisposed || IsDisposed) return; - + LostFocus -= HandleMapBoxLostFocus; + if (_mousePreviewFilter != null) + Application.RemoveMessageFilter(_mousePreviewFilter); + if (_map != null) { // special handling to prevent spurious VariableLayers events _map.VariableLayers.Interval = 0; - _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; - _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; - _map.RefreshNeeded -= HandleRefreshNeeded; + //_map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + //_map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + //_map.RefreshNeeded -= HandleRefreshNeeded; } - LostFocus -= HandleMapBoxLostFocus; - if (_mousePreviewFilter != null) - Application.RemoveMessageFilter(_mousePreviewFilter); lock (_mapLocker) { + _miRenderer.Dispose(); _map = null; - if (_imageStatic != null) - { - _imageStatic.Dispose(); - _imageStatic = null; - } - if (_imageBackground != null) - { - _imageBackground.Dispose(); - _imageBackground = null; - } - if (_imageVariable != null) - { - _imageVariable.Dispose(); - _imageVariable = null; - } - if (_image != null) - { - _image.Dispose(); - _image = null; - } - - if (_dragImage != null) - { - _dragImage.Dispose(); - _dragImage = null; - } + //if (_imageStatic != null) + //{ + // _imageStatic.Dispose(); + // _imageStatic = null; + //} + //if (_imageBackground != null) + //{ + // _imageBackground.Dispose(); + // _imageBackground = null; + //} + //if (_imageVariable != null) + //{ + // _imageVariable.Dispose(); + // _imageVariable = null; + //} + //if (_image != null) + //{ + // _image.Dispose(); + // _image = null; + //} + + //if (_dragImage != null) + //{ + // _dragImage.Dispose(); + // _dragImage = null; + //} if (_rectanglePen != null) { @@ -873,7 +880,6 @@ protected override void Dispose(bool disposing) } base.Dispose(disposing); - _isDisposed = true; } } @@ -892,346 +898,346 @@ private void HandleMapBoxLostFocus(object sender, EventArgs e) Invalidate(ClientRectangle); } - /// - /// Handles need to requery of variable layers - /// - /// - /// - private void HandleVariableLayersRequery(object sender, EventArgs e) - { - if (IsDisposed || _isDisposed) - return; - - Image oldRef; - lock (_mapLocker) - { - if (_dragging) return; - oldRef = _imageVariable; - _imageVariable = GetMap(_map, _map.VariableLayers, LayerCollectionType.Variable, _map.Envelope); - } - - UpdateImage(false); - if (oldRef != null) - oldRef.Dispose(); - - Invalidate(); - Application.DoEvents(); - } - - private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, - int sourceHeight, ImageAttributes imageAttributes) - { - lock (_backgroundImagesLocker) - { - try - { - var min = Point.Round(_map.WorldToImage(box.Min())); - var max = Point.Round(_map.WorldToImage(box.Max())); - - if (IsDisposed == false && _isDisposed == false) - { - - using (var g = Graphics.FromImage(_imageBackground)) - { - - g.DrawImage(bm, - new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)), - 0, 0, - sourceWidth, sourceHeight, - GraphicsUnit.Pixel, - imageAttributes); - - } - - UpdateImage(false); - } - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - //this can be a GDI+ Hell Exception... - } - - } - - } - - #endregion - - private Image GetMap(Map map, LayerCollection layers, LayerCollectionType layerCollectionType, - Envelope extent) - { - try - { - var width = Width; - var height = Height; - - if ((layers == null || layers.Count == 0 || width <= 0 || height <= 0)) - { - if (layerCollectionType == LayerCollectionType.Background) - return new Bitmap(1, 1); - return null; - } - - var retval = new Bitmap(width, height); - - using (var g = Graphics.FromImage(retval)) - { - g.Clear(Color.Transparent); - map.RenderMap(g, layerCollectionType, false, true); - } - - /*if (layerCollectionType == LayerCollectionType.Variable) - retval.MakeTransparent(_map.BackColor); - else if (layerCollectionType == LayerCollectionType.Static && map.BackgroundLayer.Count > 0) - retval.MakeTransparent(_map.BackColor);*/ - return retval; - } - catch (Exception ee) - { - _logger.Error("Error while rendering map", ee); - - if (layerCollectionType == LayerCollectionType.Background) - return new Bitmap(1, 1); - return null; - } - } - - - private readonly object _staticImagesLocker = new object(); - private readonly object _backgroundImagesLocker = new object(); - private readonly object _paintImageLocker = new object(); - private readonly object _mapLocker = new object(); - - private void GetImagesAsync(Envelope extent, int imageGeneration) - { - lock (_mapLocker) - { - if (_isDisposed) - return; - - if (imageGeneration < _imageGeneration) - { - /*we're to old*/ - return; - } - var safeMap = _map.Clone(); - _imageVariable = GetMap(safeMap, _map.VariableLayers, LayerCollectionType.Variable, extent); - lock (_staticImagesLocker) - { - _imageStatic = GetMap(safeMap, _map.Layers, LayerCollectionType.Static, extent); - } - lock (_backgroundImagesLocker) - { - _imageBackground = GetMap(safeMap, _map.BackgroundLayer, LayerCollectionType.Background, extent); - } - } - } - - private class GetImageEndResult - { - public Tools? Tool { get; set; } - public Envelope bbox { get; set; } - public int generation { get; set; } - } - - private void GetImagesAsyncEnd(GetImageEndResult res) - { - // draw only if generation is larger than the current, else we have aldready drawn something newer - // we must to check also IsHandleCreated because during disposal, the handle of the parent is detroyed sooner than progress bar's handle, - // this leads to cross thread operation and exception because InvokeRequired returns false, but for the progress bar it is true. - if (res == null || res.generation < _imageGeneration || _isDisposed || !IsHandleCreated) - return; - - - if (_logger.IsDebugEnabled) - _logger.DebugFormat("{2}: {0} - {1}", res.generation, res.bbox, DateTime.Now); - - - if ((_setActiveToolNoneDuringRedraw || ShowProgressUpdate) && InvokeRequired) - { - try - { - BeginInvoke(new MethodInvoker(() => GetImagesAsyncEnd(res))); - - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - } - else - { - try - { - var oldRef = _image; - if (Width > 0 && Height > 0) - { - - var bmp = new Bitmap(Width, Height); - - - using (var g = Graphics.FromImage(bmp)) - { - g.Clear(_map.BackColor); - lock (_backgroundImagesLocker) - { - //Draws the background Image - if (_imageBackground != null) - { - try - { - g.DrawImageUnscaled(_imageBackground, 0, 0); - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - } - } - - //Draws the static images - if (_staticImagesLocker != null) - { - try - { - if (_imageStatic != null) - { - g.DrawImageUnscaled(_imageStatic, 0, 0); - } - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - - } - - //Draws the variable Images - if (_imageVariable != null) - { - try - { - g.DrawImageUnscaled(_imageVariable, 0, 0); - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - } - - g.Dispose(); - } - - - lock (_paintImageLocker) - { - _image = bmp; - _imageEnvelope = res.bbox; - } - } - - if (res.Tool.HasValue) - { - if (_setActiveToolNoneDuringRedraw) - ActiveTool = res.Tool.Value; - - _dragEndPoint = new Point(0, 0); - _isRefreshing = false; - - if (_setActiveToolNoneDuringRedraw) - Enabled = true; - - if (ShowProgressUpdate) - { - _progressBar.Enabled = false; - _progressBar.Visible = false; - } - } - - lock (_paintImageLocker) - { - if (oldRef != null) - oldRef.Dispose(); - } - - Invalidate(); - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - -#if DEBUG - _watch.Stop(); - LastRefreshTime = _watch.Elapsed; -#endif + ///// + ///// Handles need to requery of variable layers + ///// + ///// + ///// + //private void HandleVariableLayersRequery(object sender, EventArgs e) + //{ + // if (IsDisposed || _isDisposed) + // return; - try - { - if (MapRefreshed != null) - { - MapRefreshed(this, null); - } - } - catch (Exception ee) - { - //Trap errors that occured when calling the eventhandlers - _logger.Warn("Exception while calling eventhandler", ee); - } - } - } + // Image oldRef; + // lock (_mapLocker) + // { + // if (_dragging) return; + // oldRef = _imageVariable; + // _imageVariable = GetMap(_map, _map.VariableLayers, LayerCollectionType.Variable, _map.Envelope); + // } - private void UpdateImage(bool forceRefresh) - { - if (_isDisposed || IsDisposed) - return; + // UpdateImage(false); + // if (oldRef != null) + // oldRef.Dispose(); - if (((_imageStatic == null && _imageVariable == null && _imageBackground == null) && !forceRefresh) || - (Width == 0 || Height == 0)) return; + // Invalidate(); + // Application.DoEvents(); + //} - Envelope bbox = _map.Envelope; - if (forceRefresh) // && _isRefreshing == false) - { - _isRefreshing = true; - Tools oldTool = ActiveTool; - if (_setActiveToolNoneDuringRedraw) - { - ActiveTool = Tools.None; - Enabled = false; - } +// private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, +// int sourceHeight, ImageAttributes imageAttributes) +// { +// lock (_backgroundImagesLocker) +// { +// try +// { +// var min = Point.Round(_map.WorldToImage(box.Min())); +// var max = Point.Round(_map.WorldToImage(box.Max())); + +// if (IsDisposed == false && _isDisposed == false) +// { + +// using (var g = Graphics.FromImage(_imageBackground)) +// { + +// g.DrawImage(bm, +// new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)), +// 0, 0, +// sourceWidth, sourceHeight, +// GraphicsUnit.Pixel, +// imageAttributes); + +// } + +// UpdateImage(false); +// } +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// //this can be a GDI+ Hell Exception... +// } + +// } + +// } + + #endregion + +// private Image GetMap(Map map, LayerCollection layers, LayerCollectionType layerCollectionType, +// Envelope extent) +// { +// try +// { +// var width = Width; +// var height = Height; + +// if ((layers == null || layers.Count == 0 || width <= 0 || height <= 0)) +// { +// if (layerCollectionType == LayerCollectionType.Background) +// return new Bitmap(1, 1); +// return null; +// } + +// var retval = new Bitmap(width, height); + +// using (var g = Graphics.FromImage(retval)) +// { +// g.Clear(Color.Transparent); +// map.RenderMap(g, layerCollectionType, false, true); +// } + +// /*if (layerCollectionType == LayerCollectionType.Variable) +// retval.MakeTransparent(_map.BackColor); +// else if (layerCollectionType == LayerCollectionType.Static && map.BackgroundLayer.Count > 0) +// retval.MakeTransparent(_map.BackColor);*/ +// return retval; +// } +// catch (Exception ee) +// { +// _logger.Error("Error while rendering map", ee); + +// if (layerCollectionType == LayerCollectionType.Background) +// return new Bitmap(1, 1); +// return null; +// } +// } + + +// private readonly object _staticImagesLocker = new object(); +// private readonly object _backgroundImagesLocker = new object(); +// private readonly object _paintImageLocker = new object(); +// private readonly object _mapLocker = new object(); + +// private void GetImagesAsync(Envelope extent, int imageGeneration) +// { +// lock (_mapLocker) +// { +// if (_isDisposed) +// return; + +// if (imageGeneration < _imageGeneration) +// { +// /*we're to old*/ +// return; +// } +// var safeMap = _map.Clone(); +// _imageVariable = GetMap(safeMap, _map.VariableLayers, LayerCollectionType.Variable, extent); +// lock (_staticImagesLocker) +// { +// _imageStatic = GetMap(safeMap, _map.Layers, LayerCollectionType.Static, extent); +// } +// lock (_backgroundImagesLocker) +// { +// _imageBackground = GetMap(safeMap, _map.BackgroundLayer, LayerCollectionType.Background, extent); +// } +// } +// } + +// private class GetImageEndResult +// { +// public Tools? Tool { get; set; } +// public Envelope bbox { get; set; } +// public int generation { get; set; } +// } + +// private void GetImagesAsyncEnd(GetImageEndResult res) +// { +// // draw only if generation is larger than the current, else we have aldready drawn something newer +// // we must to check also IsHandleCreated because during disposal, the handle of the parent is detroyed sooner than progress bar's handle, +// // this leads to cross thread operation and exception because InvokeRequired returns false, but for the progress bar it is true. +// if (res == null || res.generation < _imageGeneration || _isDisposed || !IsHandleCreated) +// return; + + +// if (_logger.IsDebugEnabled) +// _logger.DebugFormat("{2}: {0} - {1}", res.generation, res.bbox, DateTime.Now); + + +// if ((_setActiveToolNoneDuringRedraw || ShowProgressUpdate) && InvokeRequired) +// { +// try +// { +// BeginInvoke(new MethodInvoker(() => GetImagesAsyncEnd(res))); + +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } +// else +// { +// try +// { +// var oldRef = _image; +// if (Width > 0 && Height > 0) +// { + +// var bmp = new Bitmap(Width, Height); + + +// using (var g = Graphics.FromImage(bmp)) +// { +// g.Clear(_map.BackColor); +// lock (_backgroundImagesLocker) +// { +// //Draws the background Image +// if (_imageBackground != null) +// { +// try +// { +// g.DrawImageUnscaled(_imageBackground, 0, 0); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } +// } + +// //Draws the static images +// if (_staticImagesLocker != null) +// { +// try +// { +// if (_imageStatic != null) +// { +// g.DrawImageUnscaled(_imageStatic, 0, 0); +// } +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } + +// } + +// //Draws the variable Images +// if (_imageVariable != null) +// { +// try +// { +// g.DrawImageUnscaled(_imageVariable, 0, 0); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } + +// g.Dispose(); +// } + + +// lock (_paintImageLocker) +// { +// _image = bmp; +// _imageEnvelope = res.bbox; +// } +// } + +// if (res.Tool.HasValue) +// { +// if (_setActiveToolNoneDuringRedraw) +// ActiveTool = res.Tool.Value; + +// _dragEndPoint = new Point(0, 0); +// _isRefreshing = false; + +// if (_setActiveToolNoneDuringRedraw) +// Enabled = true; + +// if (ShowProgressUpdate) +// { +// _progressBar.Enabled = false; +// _progressBar.Visible = false; +// } +// } + +// lock (_paintImageLocker) +// { +// if (oldRef != null) +// oldRef.Dispose(); +// } + +// Invalidate(); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } + +//#if DEBUG +// _watch.Stop(); +// LastRefreshTime = _watch.Elapsed; +//#endif + +// try +// { +// if (MapRefreshed != null) +// { +// MapRefreshed(this, null); +// } +// } +// catch (Exception ee) +// { +// //Trap errors that occured when calling the eventhandlers +// _logger.Warn("Exception while calling eventhandler", ee); +// } +// } +// } + + //private void UpdateImage(bool forceRefresh) + //{ + // if (_isDisposed || IsDisposed) + // return; - if (ShowProgressUpdate) - { - if (InvokeRequired) - { - _progressBar.BeginInvoke(new Action(p => - { - p.Visible = true; - p.Enabled = true; - }), _progressBar); - } - else - { - _progressBar.Visible = true; - _progressBar.Enabled = true; - } - } + // if (((_imageStatic == null && _imageVariable == null && _imageBackground == null) && !forceRefresh) || + // (Width == 0 || Height == 0)) return; - int generation = ++_imageGeneration; - ThreadPool.QueueUserWorkItem( - delegate - { - GetImagesAsync(bbox, generation); - GetImagesAsyncEnd(new GetImageEndResult - {Tool = oldTool, bbox = bbox, generation = generation}); - }); - } - else - { - GetImagesAsyncEnd(new GetImageEndResult {Tool = null, bbox = bbox, generation = _imageGeneration}); - } - } + // Envelope bbox = _map.Envelope; + // if (forceRefresh) // && _isRefreshing == false) + // { + // _isRefreshing = true; + // Tools oldTool = ActiveTool; + // if (_setActiveToolNoneDuringRedraw) + // { + // ActiveTool = Tools.None; + // Enabled = false; + // } + + // if (ShowProgressUpdate) + // { + // if (InvokeRequired) + // { + // _progressBar.BeginInvoke(new Action(p => + // { + // p.Visible = true; + // p.Enabled = true; + // }), _progressBar); + // } + // else + // { + // _progressBar.Visible = true; + // _progressBar.Enabled = true; + // } + // } + + // int generation = ++_imageGeneration; + // ThreadPool.QueueUserWorkItem( + // delegate + // { + // GetImagesAsync(bbox, generation); + // GetImagesAsyncEnd(new GetImageEndResult + // {Tool = oldTool, bbox = bbox, generation = generation}); + // }); + // } + // else + // { + // GetImagesAsyncEnd(new GetImageEndResult {Tool = null, bbox = bbox, generation = _imageGeneration}); + // } + //} private void SetCursor() @@ -1294,7 +1300,7 @@ public override void Refresh() if ((_map.Layers == null || _map.Layers.Count == 0) && (_map.BackgroundLayer == null || _map.BackgroundLayer.Count == 0) && (_map.VariableLayers == null || _map.VariableLayers.Count == 0)) - _image = null; + ; //_image = null; else { Cursor c = Cursor; @@ -1302,7 +1308,8 @@ public override void Refresh() { Cursor = Cursors.WaitCursor; } - UpdateImage(true); + + _miRenderer.Generate(); if (_setActiveToolNoneDuringRedraw) { Cursor = c; @@ -1607,7 +1614,8 @@ protected override void OnMouseMove(MouseEventArgs e) return; } - bool isStartDrag = _image != null && e.Location != _dragStartPoint && !_dragging && + bool isStartDrag = //_image != null && e.Location != _dragStartPoint && !_dragging && + _miRenderer.ImageValue != null && e.Location != _dragStartPoint && !_dragging && (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) && //Left of middle button can start drag !(_setActiveToolNoneDuringRedraw && @@ -1728,6 +1736,13 @@ protected override void OnKeyDown(KeyEventArgs e) private bool UseCurrentTool { get { return _currentTool != null && _currentTool.Enabled; }} + internal bool Dragging + { + get => _dragging; + } + + public object MapLocker => _mapLocker; + /// /// Invokes the -event. /// @@ -1738,12 +1753,12 @@ protected virtual void OnMapChanging(CancelEventArgs e) if (e.Cancel) return; - if (_map != null) - { - _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; - _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; - _map.RefreshNeeded -= HandleRefreshNeeded; - } + //if (_map != null) + //{ + // _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + // _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + // _map.RefreshNeeded -= HandleRefreshNeeded; + //} } /// @@ -1754,9 +1769,9 @@ protected virtual void OnMapChanged(EventArgs e) { if (_map != null) { - _map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; - _map.MapNewTileAvaliable += HandleMapNewTileAvaliable; - _map.RefreshNeeded += HandleRefreshNeeded; + //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; + //_map.RefreshNeeded += HandleRefreshNeeded; Refresh(); } @@ -1767,6 +1782,11 @@ protected virtual void OnMapChanged(EventArgs e) if (handler != null) handler(this, e); } + internal protected virtual void OnMapRefreshed(EventArgs e) + { + MapRefreshed?.Invoke(this, e); + } + /// /// Invokes the event. /// @@ -1789,10 +1809,10 @@ protected virtual void OnMapCenterChanged(Coordinate center) handler(center); } - void HandleRefreshNeeded(object sender, EventArgs e) - { - UpdateImage(true); - } + //void HandleRefreshNeeded(object sender, EventArgs e) + //{ + // UpdateImage(true); + //} /* private void RegenerateZoomingImage() @@ -1903,18 +1923,21 @@ protected override void OnPaint(PaintEventArgs pe) { try { + if (_logger.IsDebugEnabled) + _logger.Debug($"OnPaint ({pe.ClipRectangle}), ActiveTool: {Enum.GetName(typeof(MapBox.Tools), _activeTool)}"); + + //Console.WriteLine($"OnPaint ({pe.ClipRectangle.ToString()})"); + if (_dragging) { if (_activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox || (_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) { + var image = (Bitmap) _miRenderer.ImageValue; + //Reset image to normal view - lock (_paintImageLocker) - { - var patch = ((Bitmap)_image).Clone(pe.ClipRectangle, PixelFormat.DontCare); + using (var patch = image.Clone(pe.ClipRectangle, PixelFormat.DontCare)) pe.Graphics.DrawImageUnscaled(patch, pe.ClipRectangle); - patch.Dispose(); - } //Draw selection rectangle if (_rectangle.Width > 0 && _rectangle.Height > 0) @@ -1930,27 +1953,20 @@ protected override void OnPaint(PaintEventArgs pe) else if (_activeTool == Tools.Pan || _activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || _activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon) { - if (_map.Envelope.Equals(_imageEnvelope)) - { - lock (_paintImageLocker) - { - pe.Graphics.DrawImageUnscaled(_image, 0, 0); - } - } - else - { - lock (_imageEnvelope) - { - lock (_paintImageLocker) - { - PointF ul = _map.WorldToImage(_imageEnvelope.TopLeft()); - var lr = _map.WorldToImage(_imageEnvelope.BottomRight()); - - pe.Graphics.DrawImage(_image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); - } - } + var image = _miRenderer.ImageValue; + var imageEnvelope = _miRenderer.ImageEnvelope; + if (_map.Envelope.Equals(imageEnvelope)) + pe.Graphics.DrawImageUnscaled(image, 0, 0); + else { + var ul = _map.WorldToImage(imageEnvelope.TopLeft()); + var lr = _map.WorldToImage(imageEnvelope.BottomRight()); + pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); } } + // + // This is never going to happen with the above condition in place + // + /* else if (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut) { var rect = new RectangleF(0, 0, _map.Size.Width, _map.Size.Height); @@ -1968,28 +1984,25 @@ protected override void OnPaint(PaintEventArgs pe) pe.Graphics.DrawImage(_dragImage, rect); - } + }*/ } - else if (_image != null && _image.PixelFormat != PixelFormat.Undefined) + else { + var image = _miRenderer.ImageValue; + if (image != null && image.PixelFormat != PixelFormat.Undefined) { - lock (_paintImageLocker) - { - if (_map.Envelope.Equals(_imageEnvelope)) - { - pe.Graphics.DrawImageUnscaled(_image, 0, 0); - } - else - { - var ul = _map.WorldToImage(_imageEnvelope.TopLeft()); - var lr = _map.WorldToImage(_imageEnvelope.BottomRight()); - pe.Graphics.DrawImage(_image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); - } + + var imageEnvelope = _miRenderer.ImageEnvelope; + if (_map.Envelope.Equals(imageEnvelope)) + pe.Graphics.DrawImageUnscaled(image, 0, 0); + else { + var ul = _map.WorldToImage(imageEnvelope.TopLeft()); + var lr = _map.WorldToImage(imageEnvelope.BottomRight()); + pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); } } } - //Draws current line or polygon (Draw Line or Draw Polygon tool) if (_pointArray != null) { @@ -2506,6 +2519,12 @@ public bool PreFilterMessage(ref Message m) } } + + internal void ClearDrag() + { + _dragEndPoint = new Point(0, 0); + _dragging = false; + } } diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index 09eb4205..d01d04a8 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -84,6 +84,8 @@ Component + + Component diff --git a/SharpMap.UI/SharpMap.UI.csproj.DotSettings b/SharpMap.UI/SharpMap.UI.csproj.DotSettings new file mode 100644 index 00000000..83289ccf --- /dev/null +++ b/SharpMap.UI/SharpMap.UI.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file From b5a3e9354ec904b02e894d1b6a910a5b7bc796cc Mon Sep 17 00:00:00 2001 From: joriswit Date: Mon, 5 Mar 2018 16:03:34 +0100 Subject: [PATCH 032/186] Fixed QualifiedTable in SqlServer2008 provider --- SharpMap/Data/Providers/SqlServer2008.cs | 2 +- UnitTests/Data/Providers/SQLServer2008Tests.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 77c93e23..5f309c39 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -292,7 +292,7 @@ protected string QualifiedTable get { var sb = new StringBuilder(); - if (string.IsNullOrEmpty(TableSchema)) + if (!string.IsNullOrEmpty(TableSchema)) sb.AppendFormat("[{0}].", TableSchema); sb.AppendFormat("[{0}]", Table); return sb.ToString(); diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index d84d3fb7..b23d5a9b 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -27,6 +27,11 @@ public void VerifySchemaDetection(string schemaTable, string tableSchema, string Assert.AreEqual(tableSchema, sq.TableSchema); Assert.AreEqual(table, sq.Table); Assert.AreEqual("oidcolumn", sq.ObjectIdColumn); + + System.Reflection.PropertyInfo pi = sq.GetType().GetProperty("QualifiedTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty); + string qualifiedTable = (string)pi.GetValue(sq, null); + Assert.IsTrue(qualifiedTable.Contains(tableSchema)); + Assert.IsTrue(qualifiedTable.Contains(table)); } } From 0aebedf52de7c17e2d9a6547cad6f0387b6f307e Mon Sep 17 00:00:00 2001 From: joriswit Date: Mon, 5 Mar 2018 21:10:21 +0100 Subject: [PATCH 033/186] Fixed DataTablePointTests.ExecuteIntersectionQueryReturnsExpectedFeatures --- SharpMap.Extensions/Data/Providers/DataTablePoint.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SharpMap.Extensions/Data/Providers/DataTablePoint.cs b/SharpMap.Extensions/Data/Providers/DataTablePoint.cs index 44218c5e..e88030f2 100644 --- a/SharpMap.Extensions/Data/Providers/DataTablePoint.cs +++ b/SharpMap.Extensions/Data/Providers/DataTablePoint.cs @@ -259,10 +259,10 @@ public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet d return; } - string statement = XColumn + " >= " + bbox.MaxX.ToString("R", Map.NumberFormatEnUs) + " AND " + - XColumn + " =< " + bbox.MaxX.ToString("R", Map.NumberFormatEnUs) + " AND " + + string statement = XColumn + " >= " + bbox.MinX.ToString("R", Map.NumberFormatEnUs) + " AND " + + XColumn + " <= " + bbox.MaxX.ToString("R", Map.NumberFormatEnUs) + " AND " + YColumn + " >= " + bbox.MinY.ToString("R", Map.NumberFormatEnUs) + " AND " + - YColumn + " =< " + bbox.MaxY.ToString("R", Map.NumberFormatEnUs); + YColumn + " <= " + bbox.MaxY.ToString("R", Map.NumberFormatEnUs); rows = Table.Select(statement); From ff04eaa57f9560a6f84c8e7a51f5e8672ca04d67 Mon Sep 17 00:00:00 2001 From: joriswit Date: Mon, 5 Mar 2018 21:11:22 +0100 Subject: [PATCH 034/186] Fixed CoordinateSystemExtensionsTest --- .../CoordinateSystems/CoordinateSystemExtensionsTest.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs b/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs index 69a15218..a2aafa1e 100644 --- a/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs +++ b/UnitTests/CoordinateSystems/CoordinateSystemExtensionsTest.cs @@ -59,7 +59,7 @@ public void TestCoordinateSystemForLayer(int srid) Assert.DoesNotThrow( () => cs = map.GetCoordinateSystem()); Assert.NotNull(cs); Assert.AreEqual("EPSG", cs.Authority); - Assert.AreEqual((long)srid, cs.Authority); + Assert.AreEqual((long)srid, cs.AuthorityCode); } [TestCase(4326)] @@ -73,7 +73,7 @@ public void TestCoordinateSystemForProvider(int srid) Assert.DoesNotThrow(() => cs = map.GetCoordinateSystem()); Assert.NotNull(cs); Assert.AreEqual("EPSG", cs.Authority); - Assert.AreEqual((long)srid, cs.Authority); + Assert.AreEqual((long)srid, cs.AuthorityCode); } [TestCase(4326)] @@ -88,7 +88,7 @@ public void TestCoordinateSystemForGeometry(int srid) Assert.DoesNotThrow(() => cs = g.GetCoordinateSystem()); Assert.NotNull(cs); Assert.AreEqual("EPSG", cs.Authority); - Assert.AreEqual((long)srid, cs.Authority); + Assert.AreEqual((long)srid, cs.AuthorityCode); } } } \ No newline at end of file From aedd7411566545d60fcd205111352ad5f69ae6d2 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Thu, 8 Mar 2018 17:38:31 +0100 Subject: [PATCH 035/186] Added support to shapefiles with Z values geometries --- SharpMap/Data/Providers/ShapeFile.cs | 31 +++++++++- .../Data/Providers/ShapeFileProviderTests.cs | 55 ++++++++++++++++++ UnitTests/TestData/LineString_With_Z.dbf | Bin 0 -> 270003 bytes UnitTests/TestData/LineString_With_Z.shp | Bin 0 -> 1385948 bytes UnitTests/TestData/LineString_With_Z.shx | Bin 0 -> 9868 bytes UnitTests/TestData/Point_With_Z.dbf | Bin 0 -> 93167 bytes UnitTests/TestData/Point_With_Z.shp | Bin 0 -> 50656 bytes UnitTests/TestData/Point_With_Z.shx | Bin 0 -> 9292 bytes UnitTests/UnitTests.csproj | 21 +++++++ 9 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 UnitTests/TestData/LineString_With_Z.dbf create mode 100644 UnitTests/TestData/LineString_With_Z.shp create mode 100644 UnitTests/TestData/LineString_With_Z.shx create mode 100644 UnitTests/TestData/Point_With_Z.dbf create mode 100644 UnitTests/TestData/Point_With_Z.shp create mode 100644 UnitTests/TestData/Point_With_Z.shx diff --git a/SharpMap/Data/Providers/ShapeFile.cs b/SharpMap/Data/Providers/ShapeFile.cs index e2b1a090..c16747e1 100644 --- a/SharpMap/Data/Providers/ShapeFile.cs +++ b/SharpMap/Data/Providers/ShapeFile.cs @@ -44,7 +44,7 @@ namespace SharpMap.Data.Providers /// be cached to memory for faster access, so to reload the index, you will need to restart the web application /// as well. /// - /// M and Z values in a shapefile is ignored by SharpMap. + /// M values in a shapefile are ignored by SharpMap. /// /// /// @@ -1223,7 +1223,12 @@ private static IGeometry ParseGeometry(IGeometryFactory factory, ShapeType shape if (shapeType == ShapeType.Point || shapeType == ShapeType.PointM || shapeType == ShapeType.PointZ) { - return factory.CreatePoint(new Coordinate(brGeometryStream.ReadDouble(), brGeometryStream.ReadDouble())); + var point = factory.CreatePoint(new Coordinate(brGeometryStream.ReadDouble(), brGeometryStream.ReadDouble())); + if (shapeType == ShapeType.PointZ) + { + point.Z = brGeometryStream.ReadDouble(); + } + return point; } if (shapeType == ShapeType.Multipoint || shapeType == ShapeType.MultiPointM || @@ -1237,6 +1242,13 @@ private static IGeometry ParseGeometry(IGeometryFactory factory, ShapeType shape for (var i = 0; i < nPoints; i++) feature[i] = new Coordinate(brGeometryStream.ReadDouble(), brGeometryStream.ReadDouble()); + if (shapeType == ShapeType.MultiPointZ) + { + brGeometryStream.ReadDouble(); + brGeometryStream.ReadDouble(); + for (var i = 0; i < nPoints; i++) + feature[i].Z = brGeometryStream.ReadDouble(); + } return factory.CreateMultiPoint(feature); } @@ -1267,6 +1279,14 @@ private static IGeometry ParseGeometry(IGeometryFactory factory, ShapeType shape var offset = segments[lineID]; for (var i = segments[lineID]; i < segments[lineID + 1]; i++) line[i - offset] = new Coordinate(brGeometryStream.ReadDouble(), brGeometryStream.ReadDouble()); + + if (shapeType == ShapeType.PolyLineZ) + { + brGeometryStream.ReadDouble(); + brGeometryStream.ReadDouble(); + for (var i = segments[lineID]; i < segments[lineID + 1]; i++) + line[i - offset].Z = brGeometryStream.ReadDouble(); + } lineStrings[lineID] = factory.CreateLineString(line); } @@ -1284,6 +1304,13 @@ private static IGeometry ParseGeometry(IGeometryFactory factory, ShapeType shape var offset = segments[ringID]; for (var i = segments[ringID]; i < segments[ringID + 1]; i++) ring[i - offset] = new Coordinate(brGeometryStream.ReadDouble(), brGeometryStream.ReadDouble()); + if (shapeType == ShapeType.PolygonZ) + { + brGeometryStream.ReadDouble(); + brGeometryStream.ReadDouble(); + for (var i = segments[ringID]; i < segments[ringID + 1]; i++) + ring[i - offset].Z = brGeometryStream.ReadDouble(); + } rings[ringID] = factory.CreateLinearRing(ring); } diff --git a/UnitTests/Data/Providers/ShapeFileProviderTests.cs b/UnitTests/Data/Providers/ShapeFileProviderTests.cs index deca567b..c70ecd0c 100644 --- a/UnitTests/Data/Providers/ShapeFileProviderTests.cs +++ b/UnitTests/Data/Providers/ShapeFileProviderTests.cs @@ -18,6 +18,61 @@ public void TestFixtureTearDown() ((double)_msLineal / _msVector * 100))); } + [NUnit.Framework.Test] + public void TestReadValueZFromPointZShapeFile() + { + var file = GetTestDataFilePath("Point_With_Z.shp"); + var sh = new SharpMap.Data.Providers.ShapeFile(file, true); + sh.Open(); + var fc = sh.GetFeatureCount(); + NUnit.Framework.Assert.AreEqual(1149, fc); + NUnit.Framework.Assert.AreEqual(0, sh.GetObjectIDsInView(sh.GetExtents())[0]); + var featsInView = sh.GetGeometriesInView(new GeoAPI.Geometries.Envelope(sh.GetExtents())); + NUnit.Framework.Assert.AreEqual(1149, featsInView.Count); + foreach (var item in featsInView) + { + NUnit.Framework.Assert.IsNotNull(item.Coordinate.Z); + } + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinate.Z, 146.473); + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinate.Z, 181.374); + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinate.Z, 146.676); + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinate.Z, 181.087); + NUnit.Framework.Assert.AreEqual(featsInView[4].Coordinate.Z, 169.948); + NUnit.Framework.Assert.AreEqual(featsInView[5].Coordinate.Z, 169.916); + + sh.Close(); + } + + [NUnit.Framework.Test] + public void TestReadValueZFromLineStringZShapeFile() + { + var file = GetTestDataFilePath("LineString_With_Z.shp"); + var sh = new SharpMap.Data.Providers.ShapeFile(file, true); + sh.Open(); + var fc = sh.GetFeatureCount(); + NUnit.Framework.Assert.AreEqual(1221, fc); + NUnit.Framework.Assert.AreEqual(0, sh.GetObjectIDsInView(sh.GetExtents())[0]); + var featsInView = sh.GetGeometriesInView(new GeoAPI.Geometries.Envelope(sh.GetExtents())); + NUnit.Framework.Assert.AreEqual(1221, featsInView.Count); + foreach (var item in featsInView) + { + NUnit.Framework.Assert.IsNotNull(item.Coordinate.Z); + } + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[0].Z, 35.865); + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[1].Z, 35.743); + + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[0].Z, 35.518); + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[1].Z, 35.518); + + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[0].Z, 37.438); + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[1].Z, 37.441); + + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[0].Z, 37.441); + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[1].Z, 37.441); + + sh.Close(); + } + [NUnit.Framework.Test] public void UsingTest() { diff --git a/UnitTests/TestData/LineString_With_Z.dbf b/UnitTests/TestData/LineString_With_Z.dbf new file mode 100644 index 0000000000000000000000000000000000000000..cada06136ae0fee0a79bbfeaccef3cf31b6ffbec GIT binary patch literal 270003 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ⅆ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 bool IsDisposed { get; } - // ToDo: Think of better name - // Note this is only called with forceRefresh = true, so we could expose only UpdateImage without any parameters - Task Generate(); + /// + /// Method to generate a new set of images + /// + void Generate(); } } diff --git a/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs new file mode 100644 index 00000000..ca5ba3fb --- /dev/null +++ b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs @@ -0,0 +1,444 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Common.Logging; +using GeoAPI.Geometries; +using SharpMap.Layers; + +namespace SharpMap.Forms.ImageGenerator +{ + public class LayerListImageGenerator : IMapBoxImageGenerator + { + private static readonly ILog _logger = LogManager.GetLogger(); + + private ProgressBar _progressBar; + private readonly ConcurrentDictionary> _imageLayers; + private readonly List _layers; + + private readonly object _paintImageLock = new object(); + private Bitmap _paintImage; + + private CancellationTokenSource _cts = + new CancellationTokenSource(); + + private MapBox MapBox { get; set; } + + /// + /// Creates an instance for this class + /// + /// The map box + /// A progress bar + public LayerListImageGenerator(MapBox mapBox, ProgressBar progressBar) + { + _progressBar = progressBar; + _layers = new List(); + _imageLayers = new ConcurrentDictionary>(); + + MapBox = mapBox; + WireMapBox(); + } + + private void WireMapBox() + { + MapBox.MapChanged += HandleMapChanged; + Map = MapBox.Map; + WireMap(); + } + + private void HandleMapChanged(object sender, EventArgs e) + { + UnwireMap(); + Map = MapBox.Map; + WireMap(); + + } + + private void WireMap() + { + if (Map == null) + return; + + foreach (var lyr in EnumerateLayers(Map)) + _layers.Add(lyr); + + Map.BackgroundLayer.CollectionChanged += HandleMapLayerCollectionChanged; + Map.Layers.CollectionChanged += HandleMapLayerCollectionChanged; + Map.VariableLayers.CollectionChanged += HandleMapLayerCollectionChanged; + + Map.MapNewTileAvaliable += HandleMapNewTileAvaliable; + Map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + Map.RefreshNeeded += HandleMapRefreshNeeded; + } + + private void HandleMapLayerCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + NeedsUpdate = true; + + /* + ClearCache(); + foreach (var lyr in EnumerateLayers(Map)) + _layers.Add(lyr); + */ + } + + private bool NeedsUpdate { get; set; } + + IEnumerable EnumerateLayers(Map map) + { + foreach (var lyr in EnumerateLayers(map.BackgroundLayer)) + yield return lyr; + foreach (var lyr in EnumerateLayers(map.Layers)) + yield return lyr; + foreach (var lyr in EnumerateLayers(map.VariableLayers)) + yield return lyr; + } + + IEnumerable EnumerateLayers(LayerCollection collection) + { + var coll = (ICollection) collection; + lock (coll.SyncRoot) + { + foreach (var lyr in collection) + { + foreach (var tmpLyr in EnumerateLayers(lyr)) + yield return tmpLyr; + } + } + } + + IEnumerable EnumerateLayers(ILayer lyr) + { + if (lyr is LayerGroup lyrGroup) + { + foreach (var tmpLyr in lyrGroup.Layers) + foreach (var tmpLyr2 in EnumerateLayers(tmpLyr)) + yield return tmpLyr2; + } + else + { + yield return lyr; + } + } + + private void HandleVariableLayersRequery(object sender, EventArgs e) + { + //using (var map = Map.Clone()) + //{ + var map = Map; + if (map.VariableLayers.Count == 0) + return; + + // map.DisposeLayersOnDispose = false; + + var t1 = map.MapTransform.Clone(); + var t2 = map.MapTransform.Clone(); + t2.Invert(); + + var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), + map.Size, map.PixelAspectRatio, t1, t2); + foreach (var lyr in Map.VariableLayers) + { + //new Task(RenderLayerImage, new object[] {lyr, mvp, _cts.Token }).Start(); + ThreadPool.QueueUserWorkItem(delegate { RenderLayerImage(new object[] { lyr, mvp, _cts.Token }); }); + } + //} + + } + + private void HandleMapRefreshNeeded(object sender, EventArgs e) + { + Generate(); + } + + private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, + int sourceHeight, ImageAttributes imageAttributes) + { + if (sender == null) + return; + + if (!_imageLayers.TryGetValue((ILayer)sender, out var lockImg)) + return; + + if (MapBox.IsDisposed == false && IsDisposed == false) + { + var min = Point.Round(Map.WorldToImage(box.Min())); + var max = Point.Round(Map.WorldToImage(box.Max())); + var rect = new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)); + lock (lockImg.Item1) + { + using (var g = Graphics.FromImage(lockImg.Item2)) + { + g.DrawImage(bm, rect, 0, 0, + sourceWidth, sourceHeight, + GraphicsUnit.Pixel, + imageAttributes); + } + } + + InvalidateCacheImage(); + + MapBox.Invoke(new MethodInvoker(MapBox.Invalidate), rect); + MapBox.Invoke(new MethodInvoker(MapBox.Update)); + } + } + + private void UnwireMap() + { + if (Map == null) return; + + Map.VariableLayers.CollectionChanged -= HandleMapLayerCollectionChanged; + Map.Layers.CollectionChanged -= HandleMapLayerCollectionChanged; + Map.BackgroundLayer.CollectionChanged -= HandleMapLayerCollectionChanged; + + Map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + Map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + Map.RefreshNeeded -= HandleMapRefreshNeeded; + + ClearCache(); + + Map = null; + } + + private void ClearCache() + { + foreach (var layer in _layers) + { + if (_imageLayers.TryRemove(layer, out var lockImg)) + { + lock (lockImg.Item1) + lockImg.Item2.Dispose(); + } + } + _imageLayers.Clear(); + _layers.Clear(); + } + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + + + protected virtual void Dispose(bool disposing) + { + if (disposing && !IsDisposed) + { + IsDisposed = true; + UnwireMap(); + ImageEnvelope = new Envelope(); + } + } + + + public Image Image + { + get { return ImageValue; } + } + + public Image ImageValue { + get + { + Bitmap res; + lock (_paintImageLock) + { + res = _paintImage; + if (res != null) return res; + } + + res = new Bitmap(MapBox.Width, MapBox.Height); + using (var gr = Graphics.FromImage(res)) + { + gr.Clear(Map.BackColor); + for (var i = 0; i < _layers.Count; i++) + { + lock(_imageLayers) + if (_imageLayers.TryGetValue(_layers[i], out var lockImg)) + { + lock (lockImg.Item1) + gr.DrawImageUnscaled(lockImg.Item2, 0, 0); + } + } + } + + lock (_paintImageLock) + _paintImage = res; + + return res; + } + } + + public Envelope ImageEnvelope { get; private set; } + + public bool IsDisposed { get; private set; } + public Map Map { get; private set; } + + /// + /// Method to generate a new set of images + /// + public void Generate() + { + if ( !MapBox.IsHandleCreated || IsDisposed || MapBox.IsDisposed || !MapBox.IsHandleCreated) + return; + + _logger.Debug(t => t("\n{0}> Enter Generate", Thread.CurrentThread.ManagedThreadId)); + _cts.Cancel(); + _cts = new CancellationTokenSource(); + + if (NeedsUpdate) + { + ClearCache(); + foreach (var lyr in EnumerateLayers(Map)) + _layers.Add(lyr); + } + + var map = MapBox.Map; + //using (var map = MapBox.Map) + //{ + // map.DisposeLayersOnDispose = false; + var t1 = map.MapTransform.Clone(); + var t2 = map.MapTransform.Clone(); + t2.Invert(); + + var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), + map.Size, map.PixelAspectRatio, t1, t2); + + //var tasks = new List(); + var tf = new TaskFactory(); + for (var i = 0; i < _layers.Count; i++) + { + // Has an cancellation ben requested + if (_cts.IsCancellationRequested) + break; + + // Get the layer + var lyr = _layers[i]; + + // Does the layer need rendering + if (!lyr.Enabled) continue; + + // Add task to list + //tasks.Add(tf.StartNew(RenderLayerImage, new object[] {lyr, mvp, _cts.Token})); + //new Task(RenderLayerImage, new object[] { lyr, mvp, _cts.Token }).Start(); + ThreadPool.QueueUserWorkItem(delegate { RenderLayerImage(new object[] {lyr, mvp, _cts.Token}); }); + } + + ImageEnvelope = mvp.Envelope; + //} + + _logger.Debug(t => t("\n{0}> Exit Generate", Thread.CurrentThread.ManagedThreadId)); + } + + private static Random Rnd = new Random(445861); + + /// + /// Function to render a layer to an image + /// + /// + /// + private Rectangle RenderLayerImage(object param) + { + var parameters = (object[]) param; + var lyr = (ILayer)parameters[0]; + var mvp = (MapViewport) parameters[1]; + + var sw = new Stopwatch(); + _logger.Debug(t => t("\n{0}> Enter RenderLayerImage {1}\n{0}>\t{2} => {3}", + Thread.CurrentThread.ManagedThreadId, lyr.LayerName, mvp.Envelope, mvp.Size)); + sw.Start(); + + var isAsync = false; + Tuple img = null; + if (lyr is ITileAsyncLayer) + { + _imageLayers.TryGetValue(lyr, out img); + //img = _imageLayers[lyr]; + isAsync = true; + } + + // Update size if necessary + if (img != null) + { + lock (img.Item1) + if (img.Item2 != null && img.Item2.Size != Map.Size) + { + var lockObj = img.Item1; + var imageObj = img.Item2; + var newLockImg = Tuple.Create(lockObj, + new Bitmap(mvp.Size.Width, mvp.Size.Height, PixelFormat.Format32bppArgb)); + _imageLayers.TryUpdate(lyr, newLockImg, img); + //imageObj.Dispose(); + } + } + + if (img == null) + { + + img = Tuple.Create(new object(), new Bitmap(mvp.Size.Width, mvp.Size.Height, PixelFormat.Format32bppArgb)); + _imageLayers.AddOrUpdate(lyr, img, (u,v) => img); + //lock (((IDictionary)_imageLayers).SyncRoot) + //_imageLayers[lyr] = img; + } + + //img = _imageLayers[lyr]; + lock (img.Item1) + { + using (var gr = Graphics.FromImage(img.Item2)) + { + gr.Clear(Color.Transparent); + lyr.Render(gr, mvp); + //if (Rnd.NextDouble() < 0.15) + // Thread.Sleep(2000); + } + } + + var updateArea = mvp.Envelope.Intersection(lyr.Envelope); + var lt = Point.Truncate( mvp.WorldToImage(updateArea.TopLeft())); + var rb = Point.Ceiling(mvp.WorldToImage(updateArea.BottomRight())); + var updateRect = Rectangle.FromLTRB(lt.X, lt.Y, rb.X, rb.Y); + + if (MapBox.IsHandleCreated) + { + _logger.Debug(t => t("\n{0}> Invalidating rectangle {1}",Thread.CurrentThread.ManagedThreadId, updateRect)); + InvalidateCacheImage(); + + MapBox.Invalidate(updateRect); + //MapBox.Invoke(new MethodInvoker(() => MapBox.Invalidate(updateRect))); + MapBox.Invoke(new MethodInvoker(() => MapBox.Update())); + + /* + InvalidateCacheImage(); + MapBox.Invoke(new MethodInvoker(MapBox.Invalidate), updateRect); + MapBox.Invoke(new MethodInvoker(MapBox.Update)); + */ + } + + sw.Stop(); + _logger.Debug(t => t("\n{0}> Exit RenderLayerImage {1} after {4}ms \n{0}>\t{2} => {3}", + Thread.CurrentThread.ManagedThreadId, lyr.LayerName, mvp.Envelope, mvp.Size, + sw.ElapsedMilliseconds)); + + return updateRect; + } + + + + private void InvalidateCacheImage() + { + if (Monitor.TryEnter(_paintImageLock, 25)) + { + _paintImage?.Dispose(); + _paintImage = null; + Monitor.Exit(_paintImageLock); + } + } + } +} diff --git a/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs b/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs index 1eda9b1b..5bea0005 100644 --- a/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs +++ b/SharpMap.UI/Forms/ImageGenerator/LegacyMapImageRenderer.cs @@ -12,7 +12,9 @@ namespace SharpMap.Forms.ImageGenerator { - + /// + /// + /// public class LegacyMapBoxImageGenerator : IMapBoxImageGenerator { private static readonly ILog _logger = LogManager.GetLogger(); @@ -184,7 +186,7 @@ private void HandleVariableLayersRequery(object sender, EventArgs e) oldRef.Dispose(); _mapBox.Invalidate(rect); - _mapBox.Update(); + _mapBox.Invoke(new MethodInvoker(_mapBox.Update)); //// TODO Why? //Application.DoEvents(); @@ -522,11 +524,9 @@ private static void TryDrawImage(Graphics g, Image image, Rectangle rect) /// /// /// - public Task Generate() + public void Generate() { - var res = new Task(() => UpdateImage(true, new Rectangle(Point.Empty, MapBox.Size))); - res.Start(); - return res; + UpdateImage(true, new Rectangle(Point.Empty, MapBox.Size)); } private void UpdateImage(bool forceRefresh, Rectangle updateArea) diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index 8234861c..9433a48b 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -64,6 +64,13 @@ namespace SharpMap.Forms // ReSharper disable once PartialTypeWithSinglePart public partial class MapBox : Control { + protected override void OnInvalidated(InvalidateEventArgs e) + { + base.OnInvalidated(e); + _logger.Debug(t => t("Rectangle {0} invalidate", e.InvalidRect)); + } + + private static readonly ILog _logger = LogManager.GetLogger(typeof (MapBox)); private const double PrecisionTolerance = 0.00000001; @@ -357,7 +364,7 @@ public enum MapQueryType #endregion - private LegacyMapBoxImageGenerator _miRenderer; + private readonly IMapBoxImageGenerator _miRenderer; private static int m_defaultColorIndex; diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index d01d04a8..1d4cf2c1 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -75,6 +75,7 @@ + Component From 73a9f39ced8c8f8198932c46c19bcd62b3af9c45 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 21 Mar 2018 13:01:24 +0100 Subject: [PATCH 040/186] Try to set the SRID value upon opening the Dataset Automatically compute the BitDepth for the raster band Computing histogram locally in GetPreview, setting the result upon exit. --- SharpMap.Extensions/Layers/GdalRasterLayer.cs | 67 ++++++++++++++++--- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/SharpMap.Extensions/Layers/GdalRasterLayer.cs b/SharpMap.Extensions/Layers/GdalRasterLayer.cs index 27c19a0a..4b13d0d1 100644 --- a/SharpMap.Extensions/Layers/GdalRasterLayer.cs +++ b/SharpMap.Extensions/Layers/GdalRasterLayer.cs @@ -361,6 +361,26 @@ protected void OpenDataset(string imageFilename) File.ReadAllText(imageFilename.Substring(0, imageFilename.LastIndexOf(".", StringComparison.CurrentCultureIgnoreCase)) + ".prj"); } + if (!String.IsNullOrEmpty(Projection)) + { + using (var p = new OSGeo.OSR.SpatialReference(null)) + { + var wkt = Projection; + var res = p.ImportFromWkt(ref wkt); + var srid = 0; + if (res == 0) + { + if (Projection.StartsWith("PROJCS")) + int.TryParse(p.GetAuthorityCode("PROJCS"), out srid); + else if (Projection.StartsWith("GEOGCS")) + int.TryParse(p.GetAuthorityCode("GEOGCS"), out srid); + else + srid = p.AutoIdentifyEPSG(); + } + SRID = srid; + } + } + if (_logger.IsDebugEnabled) _logger.Debug("Read sizes" + imageFilename); @@ -781,9 +801,9 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, return; // init histo - Histogram = new List(); + var histogram = new List(); for (int i = 0; i < Bands + 1; i++) - Histogram.Add(new int[256]); + histogram.Add(new int[256]); var trueImageBbox = displayBbox.Intersection(_envelope); @@ -820,8 +840,10 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, displayImageSize.Height = bitmapSize.Height; } + /* // scale var bitScalar = GetBitScalar(); + */ // 0 pixels in length or height, nothing to display if (bitmapSize.Width < 1 || bitmapSize.Height < 1) @@ -850,6 +872,7 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, } var ch = new int[Bands]; + var bitScales = new double[Bands]; var noDataValues = new Double[Bands]; var scales = new Double[Bands]; @@ -876,6 +899,8 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, band.GetScale(out scales[i], out hasVal); if (hasVal == 0) scales[i] = 1.0; + // + bitScales[i] = GetBitScale(band.DataType); switch (band.GetRasterColorInterpretation()) { case ColorInterp.GCI_BlueBand: @@ -1035,7 +1060,7 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, intermediateValue[i] *= scales[i]; double spotVal; - var imageVal = spotVal = intermediateValue[i] = intermediateValue[i]/bitScalar; + var imageVal = spotVal = intermediateValue[i] = intermediateValue[i] * bitScales[i]; if (ch[i] == 4) { @@ -1087,7 +1112,7 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, HistoBounds.Top <= (int) gndY && HistoBounds.Left <= (int) gndX && HistoBounds.Right >= (int) gndX) { - Histogram[ch[i]][(int) intermediateValue[i]]++; + histogram[ch[i]][(int) intermediateValue[i]]++; } } @@ -1098,7 +1123,7 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, // luminosity if (Bands >= 3) - Histogram[Bands][ + histogram[Bands][ (int) (intermediateValue[2]*0.2126 + intermediateValue[1]*0.7152 + intermediateValue[0]*0.0722)] @@ -1128,9 +1153,12 @@ protected virtual void GetPreview(Dataset dataset, Size size, Graphics g, { bitmap.UnlockBits(bitmapData); } + + // Update the histogram + Histogram = histogram; } - + DateTime drawGdiStart = DateTime.Now; bitmap.MakeTransparent(_noDataInitColor); if (TransparentColor != Color.Empty) @@ -1324,7 +1352,7 @@ private void GetNonRotatedPreview(Dataset dataset, Size size, Graphics g, dblLocY = size.Height - dblImginMapH; } - double bitScalar = GetBitScalar(); + //double bitScalar = GetBitScalar(); try { @@ -1349,6 +1377,8 @@ private void GetNonRotatedPreview(Dataset dataset, Size size, Graphics g, var buffer = new double[Bands][]; var band = new Band[Bands]; var ch = new int[Bands]; + var bitScales = new double[Bands]; + // get data from image for (int i = 0; i < Bands; i++) { @@ -1362,6 +1392,8 @@ private void GetNonRotatedPreview(Dataset dataset, Size size, Graphics g, band[i].GetScale(out scales[i], out hasVal); if (hasVal == 0) scales[i] = 1.0; + bitScales[i] = GetBitScale(band[i].DataType); + band[i].ReadRaster((int)Math.Round(x1), (int)Math.Round(y1), (int)Math.Round(imgPixWidth), (int)Math.Round(imgPixHeight), buffer[i], (int)Math.Round(dblImginMapW), (int)Math.Round(dblImginMapH), @@ -1431,8 +1463,8 @@ private void GetNonRotatedPreview(Dataset dataset, Size size, Graphics g, { for (int i = 0; i < Bands; i++) { - intVal[i] = buffer[i][pIndx]/bitScalar; - Double imageVal = intVal[i] = intVal[i]/bitScalar; + var imageVal = intVal[i] = buffer[i][pIndx]*bitScales[i]; + //Double imageVal = intVal[i] = intVal[i]*bitScales[i]; if (ch[i] == 4) { if (!DoublesAreEqual(imageVal, noDataValues[i])) @@ -1522,6 +1554,21 @@ private double GetBitScalar() return 1; } + private static double GetBitScale(DataType dataType) + { + switch (dataType) + { + //case DataType.GDT_Byte: + // return 1d; + case DataType.GDT_UInt16: + case DataType.GDT_Int16: + return 1d/256d; + case DataType.GDT_Int32: + case DataType.GDT_UInt32: + return 1d/16777216d; + } + return 1d; + } protected unsafe void WritePixel(double x, double[] intVal, int iPixelSize, int[] ch, byte* row) { // write out pixels @@ -2075,4 +2122,4 @@ private bool DoublesAreEqual(double val1, double val2) return Math.Abs(val1 - val2) < double.Epsilon; } } -} \ No newline at end of file +} From 3b97bdf67faba739e80a37afd6ee5ebdb6d7805a Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 21 Mar 2018 13:02:46 +0100 Subject: [PATCH 041/186] Cloning GDI objects to solve threading issues --- SharpMap.Layers.HeatLayer/HeatLayer.cs | 5 +++-- SharpMap/Rendering/Thematics/GradientTheme.cs | 10 +++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/SharpMap.Layers.HeatLayer/HeatLayer.cs b/SharpMap.Layers.HeatLayer/HeatLayer.cs index b5075821..79e5abe7 100644 --- a/SharpMap.Layers.HeatLayer/HeatLayer.cs +++ b/SharpMap.Layers.HeatLayer/HeatLayer.cs @@ -178,7 +178,7 @@ public override void Render(Graphics g, MapViewport map) } var zoomIndex = GetZoomIndex(map.Zoom); - var dot = _bitmaps[zoomIndex]; + var dot = (Bitmap)_bitmaps[zoomIndex].Clone(); var opacity = _opacity[zoomIndex]; using (var image = new Bitmap(map.Size.Width + dot.Width, map.Size.Height + dot.Height, PixelFormat.Format32bppArgb)) @@ -193,6 +193,7 @@ public override void Render(Graphics g, MapViewport map) g.DrawImage(image, -dot.Width/2, -dot.Height/2); } + dot.Dispose(); // Invoke the LayerRendered event. OnLayerRendered(g); @@ -536,4 +537,4 @@ private void InterpolateOpacityValues() #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/Thematics/GradientTheme.cs b/SharpMap/Rendering/Thematics/GradientTheme.cs index 0a4a2bc9..cdec65ef 100644 --- a/SharpMap/Rendering/Thematics/GradientTheme.cs +++ b/SharpMap/Rendering/Thematics/GradientTheme.cs @@ -256,6 +256,11 @@ protected SolidBrush InterpolateBrush(Brush min, Brush max, double attr) /// An interpolated . protected Pen InterpolatePen(Pen min, Pen max, double attr) { + var oldMin = min; + min = (Pen) oldMin.Clone(); + var oldMax = max; + max = (Pen) oldMax.Clone(); + if (min.PenType != PenType.SolidColor || max.PenType != PenType.SolidColor) throw (new ArgumentException("Only SolidColor pens are supported in GradientTheme")); Pen pen = new Pen(InterpolateColor(min.Color, max.Color, attr), InterpolateFloat(min.Width, max.Width, attr)); @@ -274,6 +279,9 @@ protected Pen InterpolatePen(Pen min, Pen max, double attr) pen.Alignment = (frac > 0.5 ? max.Alignment : min.Alignment); //pen.CustomStartCap = (frac > 0.5 ? max.CustomStartCap : min.CustomStartCap); //Throws ArgumentException //pen.CustomEndCap = (frac > 0.5 ? max.CustomEndCap : min.CustomEndCap); //Throws ArgumentException + + min.Dispose(); + max.Dispose(); return pen; } @@ -434,4 +442,4 @@ public object Clone() return res; } } -} \ No newline at end of file +} From cfb32386086a07c908cd377664b6319d5da5aea0 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 21 Mar 2018 13:03:32 +0100 Subject: [PATCH 042/186] Fixing serialization surrogate for linear gradient brush --- SharpMap/Utilities/Surrogates.Brushes.cs | 6 ++---- SharpMap/Utilities/Surrogates.Helper.cs | 6 ++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/SharpMap/Utilities/Surrogates.Brushes.cs b/SharpMap/Utilities/Surrogates.Brushes.cs index 06e49d9d..16d7915d 100644 --- a/SharpMap/Utilities/Surrogates.Brushes.cs +++ b/SharpMap/Utilities/Surrogates.Brushes.cs @@ -311,9 +311,7 @@ public LinearGradientBrushRef(SerializationInfo info, StreamingContext context) else { var tmpBlend = (Blend)(info.GetValue("Blend", typeof(Blend))); - lgBrush.Blend = new Blend(tmpBlend.Factors.Length) { - Factors = tmpBlend.Factors, - Positions = tmpBlend.Positions }; + lgBrush.Blend = tmpBlend; } _lgBrush = lgBrush; @@ -382,4 +380,4 @@ Object ISerializationSurrogate.SetObjectData(Object obj, SerializationInfo info, #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Utilities/Surrogates.Helper.cs b/SharpMap/Utilities/Surrogates.Helper.cs index bc92d179..f2e32203 100644 --- a/SharpMap/Utilities/Surrogates.Helper.cs +++ b/SharpMap/Utilities/Surrogates.Helper.cs @@ -98,7 +98,9 @@ object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, { var blend = (Blend)obj; blend.Factors = (float[])info.GetValue("Factors", typeof(float[])); - blend.Positions = (float[])info.GetValue("Positions", typeof(float[])); + blend.Positions = new float[blend.Factors.Length]; + var positions = (float[])info.GetValue("Positions", typeof(float[])); + Array.Copy(positions, 0, blend.Positions, 0, blend.Positions.Length); return null; } } @@ -247,4 +249,4 @@ private static float[] ToFloatArray(ColorMatrix matrix) #endregion } -} \ No newline at end of file +} From 533612eb0225c8105713194de2a1aef7f8d8c8c1 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 21 Mar 2018 13:05:17 +0100 Subject: [PATCH 043/186] Fixing serialization of Map by marking VariableLayerCollection._timer as NonSerialized --- SharpMap/Layers/VariableLayerCollection.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/SharpMap/Layers/VariableLayerCollection.cs b/SharpMap/Layers/VariableLayerCollection.cs index 13b9ac8a..cf6f4197 100644 --- a/SharpMap/Layers/VariableLayerCollection.cs +++ b/SharpMap/Layers/VariableLayerCollection.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Runtime.Serialization; using System.Timers; namespace SharpMap.Layers @@ -40,6 +41,7 @@ public enum LayerCollectionType public class VariableLayerCollection : LayerCollection { private readonly LayerCollection _variableLayers; + [NonSerialized] private Timer _timer = null; /// @@ -54,6 +56,12 @@ public void TouchTimer() System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(OnRequery)); } + [OnDeserializing] + public void OnDeserializing(StreamingContext context) + { + _timer = new Timer(); + } + /// /// Event fired every to force requery; /// @@ -158,4 +166,4 @@ public bool Pause set { _pause = value; } } } -} \ No newline at end of file +} From 71b1f4ee9237e16fa95dd54d074d83ca52500dd0 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Fri, 13 Apr 2018 08:41:15 +0700 Subject: [PATCH 044/186] Ensure all assemblies are scanned to populate Map Decorations --- Examples/WinFormSamples/FormMapBox.cs | 44 +++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/Examples/WinFormSamples/FormMapBox.cs b/Examples/WinFormSamples/FormMapBox.cs index c3f337aa..f55f4c96 100644 --- a/Examples/WinFormSamples/FormMapBox.cs +++ b/Examples/WinFormSamples/FormMapBox.cs @@ -46,12 +46,17 @@ public static bool UseDotSpatial public FormMapBox() { AddToListView = false; - AppDomain.CurrentDomain.AssemblyLoad += HandleAssemblyLoad; InitializeComponent(); mapBox1.ActiveTool = MapBox.Tools.Pan; + var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (System.Reflection.Assembly a in loadedAssemblies) + LoadMapDecorationTypes(a); + AddToListView = true; + AppDomain.CurrentDomain.AssemblyLoad += HandleAssemblyLoad; + foreach (var name in MapDecorationTypes.Keys) { lvwDecorations.Items.Add(name); @@ -60,13 +65,40 @@ public FormMapBox() } + + // Public Shared Sub RegisterIdpMessages(assembly As Assembly) + // For Each subclass In assembly.DefinedTypes.Where(Function(t) t.IsSubclassOf(GetType(IdpMessage)) And t.IsAbstract = False) + // RegisterIdpMessage(subclass) + // Next + //End Sub + private void HandleAssemblyLoad(object sender, AssemblyLoadEventArgs args) { - var mdtype = typeof (SharpMap.Rendering.Decoration.IMapDecoration); - foreach (Type type in args.LoadedAssembly.GetTypes()) + LoadMapDecorationTypes(args.LoadedAssembly); + //var mdtype = typeof (SharpMap.Rendering.Decoration.IMapDecoration); + //foreach (Type type in args.LoadedAssembly.GetTypes()) + //{ + // if (type.FullName.StartsWith("SharpMap")) + // Console.WriteLine(type.FullName); + // if (mdtype.IsAssignableFrom(type)) + // { + // if (!type.IsAbstract) + // { + // if (AddToListView) + // lvwDecorations.Items.Add(new ListViewItem(type.Name)); + // MapDecorationTypes.Add(type.Name, type); + // } + // } + //} + } + + private void LoadMapDecorationTypes(System.Reflection.Assembly a) + { + var mdtype = typeof(SharpMap.Rendering.Decoration.IMapDecoration); + foreach (Type type in a.GetTypes()) { - //if (type.FullName.StartsWith("SharpMap.Decoration")) - // Console.WriteLine(type.FullName); + if (type.FullName.StartsWith("SharpMap")) + Console.WriteLine(type.FullName); if (mdtype.IsAssignableFrom(type)) { if (!type.IsAbstract) @@ -148,4 +180,4 @@ private void btnTool_Click(object sender, EventArgs e) //} } } -} \ No newline at end of file +} From 8b0ed7e89eae69613ee6d4e64cb93ed12a2f7abf Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Fri, 13 Apr 2018 08:47:21 +0700 Subject: [PATCH 045/186] Remove commented lines --- Examples/WinFormSamples/FormMapBox.cs | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/Examples/WinFormSamples/FormMapBox.cs b/Examples/WinFormSamples/FormMapBox.cs index f55f4c96..fa12de3e 100644 --- a/Examples/WinFormSamples/FormMapBox.cs +++ b/Examples/WinFormSamples/FormMapBox.cs @@ -65,31 +65,9 @@ public FormMapBox() } - - // Public Shared Sub RegisterIdpMessages(assembly As Assembly) - // For Each subclass In assembly.DefinedTypes.Where(Function(t) t.IsSubclassOf(GetType(IdpMessage)) And t.IsAbstract = False) - // RegisterIdpMessage(subclass) - // Next - //End Sub - private void HandleAssemblyLoad(object sender, AssemblyLoadEventArgs args) { LoadMapDecorationTypes(args.LoadedAssembly); - //var mdtype = typeof (SharpMap.Rendering.Decoration.IMapDecoration); - //foreach (Type type in args.LoadedAssembly.GetTypes()) - //{ - // if (type.FullName.StartsWith("SharpMap")) - // Console.WriteLine(type.FullName); - // if (mdtype.IsAssignableFrom(type)) - // { - // if (!type.IsAbstract) - // { - // if (AddToListView) - // lvwDecorations.Items.Add(new ListViewItem(type.Name)); - // MapDecorationTypes.Add(type.Name, type); - // } - // } - //} } private void LoadMapDecorationTypes(System.Reflection.Assembly a) From bfe241c105f31edd3d417533ced07608f12e90a8 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Fri, 13 Apr 2018 08:51:49 +0700 Subject: [PATCH 046/186] Add class ScaleBarAltUnit Add Nautical Mile (NM) to scale bar units --- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 35 +++-- .../Decoration/ScaleBar/ScaleBarAltUnit.cs | 127 ++++++++++++++++++ .../Rendering/Decoration/ScaleBar/Unit.cs | 6 +- SharpMap/SharpMap.csproj | 1 + 4 files changed, 159 insertions(+), 10 deletions(-) create mode 100644 SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index f8c8a182..e9cd12ed 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -55,6 +55,7 @@ static ScaleBar() Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Custom, 1609.347219, "Miles", "mi")); Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Custom, 1000.0, "Kilometers", "km")); Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Custom, 0.0175, "Degree", "d")); + Units.Add((int)Unit.Nautical_Mile , new UnitInfo((int)Unit.Custom, 1852, "Nautical Mile", "NM")); } /// @@ -74,7 +75,7 @@ public ScaleBar() //unit private int _mapUnit = (int)Unit.Meter; //defaultMapUnit; private int _barUnit = (int)Unit.Meter; //defaultScaleBarUnit; - + //scale private double _scale; //Initial scale. private double _mapWidth; @@ -126,6 +127,9 @@ protected override Size InternalSize(Graphics g, Map map) /// protected override void OnRender(Graphics g, Map map) { + if (!this.Enabled) + return; + var rectF = g.ClipBounds; if (MapUnit == (int)Unit.Degree) @@ -174,6 +178,7 @@ private void RenderScaleBar(Graphics g, Rectangle rc) RenderSegmentText(g, rc.Left + nOffsetX, rc.Top + nOffsetY + _barWidth + GapBarToSegmentText, _numTics, pixelsPerTic, scaleBarUnitsPerTick, _barUnitShortName); + Dirty = false; } /// @@ -638,7 +643,10 @@ public int BarWidth private double _mapUnitFactor; private string _mapUnitName, _mapUnitShortName; - private double _barUnitFactor; + /// + /// Factor derived internally from BarUnit + /// + protected double _barUnitFactor; private string _barUnitName, _barUnitShortName; /// @@ -660,7 +668,7 @@ public int MapUnit /// /// Bar unit /// - public int BarUnit + public virtual int BarUnit { get { return _barUnit; } set @@ -673,7 +681,10 @@ public int BarUnit } } - private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, + /// + /// Extract parameters for specified scale bar unit + /// + protected static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, out string mapUnitShortName) { UnitInfo unitInfo; @@ -850,7 +861,7 @@ private string ScaleBarText(double scale, ScaleBarLabelText scaleText) precision = 0; } - var format = string.Format("F{0}", precision); + var format = string.Format("N{0}", precision); scale = FormatRealScale(scale); return "1:" + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); @@ -901,14 +912,17 @@ public int MarginRight #region EventInvokers - private void OnViewChanged() + /// + /// Is this required? + /// + protected virtual void OnViewChanged() { } /// /// Gets or (private) sets whether the display settings for the scale bar have been changed /// - public bool Dirty { get; private set; } + public bool Dirty { get; protected set; } #endregion @@ -954,7 +968,10 @@ private static double GetRoundIncrement(double startValue) return candidate; //return the maximum } - private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + /// + /// Calculate scale bar tic size based upon current BarUnit + /// + protected virtual void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, out int pixelsPerTic, out double scaleBarUnitsPerTic) { int minPixelsPerTic = widthOnDevice / (numTics * 2); @@ -1017,4 +1034,4 @@ static private int MeasureDisplayStringWidthExact(Graphics graphics, string text #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs new file mode 100644 index 00000000..dca47f56 --- /dev/null +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs @@ -0,0 +1,127 @@ +using System; + +namespace SharpMap.Rendering.Decoration.ScaleBar +{ + /// + /// Scale Bar map decoration with switching between units for large and small scales + /// + [Serializable] + public class ScaleBarAltUnit : ScaleBar + { + //NB defaults set during base class initialisation + private int _barUnitAlt1; + private int _barUnitAlt2; + + private double _barUnitFactorAlt1; + private double _barUnitFactorAlt2; + + private Boolean _forceIt = false; + + /// + /// ScaleBar unit. Changing BarUnit will reset BarUnitAlt1 and BarUnitAlt2 accordingly. + /// + public override int BarUnit + { + get => base.BarUnit; + set + { + base.BarUnit = value; + // This effectively reverts to standard ScaleBar behaviour. + _barUnitAlt1 = BarUnit; + _barUnitFactorAlt1 = _barUnitFactor; + _barUnitAlt2 = BarUnit; + _barUnitFactorAlt2 = _barUnitFactor; + } + } + + /// + /// Bar Unit for use at large scales (small area) such as ft, m, or yd + /// + public int BarUnitAlt1 + { + get { return _barUnitAlt1; } + set + { + GetUnitInformation(value, out double d, out string s1, out string s2); + + if (d > 1 || value == (int)Unit.Degree) + throw new ArgumentOutOfRangeException("BarUnitAlt1 must be the smaller unit such as ft, m, or yd"); + + _barUnitAlt1 = value; + _barUnitFactorAlt1 = d; + _forceIt = true; + OnViewChanged(); + Dirty = true; + } + } + /// + /// Bar Unit for use at small scales (large area) such as km, mile, NM + /// + public int BarUnitAlt2 + { + get { return _barUnitAlt2; } + set + { + GetUnitInformation(value, out double d, out string s1, out string s2); + + if (d < 1 && value != (int)Unit.Degree) + throw new ArgumentOutOfRangeException("BarUnitAlt2 must be larger unit such as such as km, mi, nm, or deg"); + + _barUnitAlt2 = value; + _barUnitFactorAlt2 = d; + _forceIt = true; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Calculate scale bar intervals, plugging BarUnitAlt1 or BarUnitAlt2 into base class BarUnit if change is required + /// + protected override void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + // if user has changed BarUnitAlt1 or BarUnitAlt2 then forcefully change base BarUnit + if (_forceIt) + base.BarUnit = BarUnitAlt1; + + // now calc intervals for current BarUnitAltX + base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out int pixelsPerTicAlt, out double scaleBarUnitsPerTicAlt); + // prelim values + pixelsPerTic = pixelsPerTicAlt; + scaleBarUnitsPerTic = scaleBarUnitsPerTicAlt; + + // check if need changing + if (_forceIt || _barUnitAlt1 != _barUnitFactorAlt2) + { + if (base._barUnitFactor != _barUnitFactorAlt1) + { + // calculate ScaleBarUnitsPerTic for SMALLER unit + base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorAlt1, out int pixelsPerTicSmaller, out double scaleBarUnitsPerTicSmaller); + + // Switch from LARGER unit to SMALLER unit when LESS than 1 larger unit + if (NumTicks * scaleBarUnitsPerTicSmaller * _barUnitFactorAlt1 < _barUnitFactorAlt2) + { + base.BarUnit = _barUnitAlt1; + // using calcs for SMALLER unit + pixelsPerTic = pixelsPerTicSmaller; + scaleBarUnitsPerTic = scaleBarUnitsPerTicSmaller; + } + } + else + { + // Switch to LARGER unit when >= 1 larger unit (ie smaller units never exceed 1 larger unit) + // scaleBarUnitsPerTicAlt is the SMALLER unit + if (NumTicks * scaleBarUnitsPerTicAlt * _barUnitFactorAlt1 >= _barUnitFactorAlt2) + { + base.BarUnit = _barUnitAlt2; + // recalc for LARGER unit + base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorAlt2, out pixelsPerTicAlt, out scaleBarUnitsPerTicAlt); + pixelsPerTic = pixelsPerTicAlt; + scaleBarUnitsPerTic = scaleBarUnitsPerTicAlt; + } + } + } + _forceIt = false; + } + } +} diff --git a/SharpMap/Rendering/Decoration/ScaleBar/Unit.cs b/SharpMap/Rendering/Decoration/ScaleBar/Unit.cs index e957baf3..534ec979 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/Unit.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/Unit.cs @@ -41,5 +41,9 @@ public enum Unit /// Degree, + /// + /// Nautical Mile + /// + Nautical_Mile, } -} \ No newline at end of file +} diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index 1527ffc9..72e25a55 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -136,6 +136,7 @@ Code + From b4ae43405fb71b58c349170a5398213395929c0f Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Tue, 17 Apr 2018 08:26:03 +0700 Subject: [PATCH 047/186] Set ScaleBarAltUnit default units m / km Update comment on BarUnit. --- .../Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs index dca47f56..3fd1100e 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs @@ -18,7 +18,16 @@ public class ScaleBarAltUnit : ScaleBar private Boolean _forceIt = false; /// - /// ScaleBar unit. Changing BarUnit will reset BarUnitAlt1 and BarUnitAlt2 accordingly. + /// Creates an instance of this class + /// + public ScaleBarAltUnit() + { + BarUnitAlt1 = (int)Unit.Meter; + BarUnitAlt2 = (int)Unit.Kilometer; + } + + /// + /// Pseudo-internal ScaleBar unit for rendering, not intended to be set directly. Instead, use BarUnitAlt1 and BarUnitAlt2. /// public override int BarUnit { From 055183afd850c3336c306cb6b59190e0d3752ab5 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Mon, 30 Apr 2018 09:54:34 +0700 Subject: [PATCH 048/186] Revert to original ScaleBar Delete ScaleBarAltUnit & remove from proj --- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 294 ++++++++++++++---- .../Decoration/ScaleBar/ScaleBarAltUnit.cs | 136 -------- SharpMap/SharpMap.csproj | 1 - 3 files changed, 234 insertions(+), 197 deletions(-) delete mode 100644 SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index e9cd12ed..0bb06d76 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -24,7 +24,7 @@ public class ScaleBar : MapDecoration private const int PowerRangeMax = 10; private const int NiceNumber = 4; private const int DefaultBarWidth = 9; - private static readonly double[] NiceNumberArray = {1, 2, 2.5, 5}; + private static readonly double[] NiceNumberArray = { 1, 2, 2.5, 5 }; private const int ScalePrecisionDigits = 5; private const int GapScaleTextToBar = 3; private const int GapBarToSegmentText = 1; @@ -44,7 +44,7 @@ public class ScaleBar : MapDecoration #endregion private static readonly Dictionary Units = new Dictionary(); - + static ScaleBar() { Units.Add((int)Unit.Custom, new UnitInfo((int)Unit.Custom, 1.0, "Unknown", "Unknown")); @@ -55,7 +55,7 @@ static ScaleBar() Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Custom, 1609.347219, "Miles", "mi")); Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Custom, 1000.0, "Kilometers", "km")); Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Custom, 0.0175, "Degree", "d")); - Units.Add((int)Unit.Nautical_Mile , new UnitInfo((int)Unit.Custom, 1852, "Nautical Mile", "NM")); + Units.Add((int)Unit.Nautical_Mile, new UnitInfo((int)Unit.Custom, 1852, "Nautical Mile", "NM")); } /// @@ -64,7 +64,8 @@ static ScaleBar() public ScaleBar() { MapUnit = (int)Unit.Meter; - BarUnit = (int)Unit.Meter; + BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; Scale = 1; Width = DefaultWidth; } @@ -74,15 +75,19 @@ public ScaleBar() //unit private int _mapUnit = (int)Unit.Meter; //defaultMapUnit; + private int _obsBarUnit = (int)Unit.Meter; private int _barUnit = (int)Unit.Meter; //defaultScaleBarUnit; + private int _barUnitLargeScale = (int)Unit.Meter; //defaultScaleBarUnit; + private int _barUnitSmallScale = (int)Unit.Kilometer; //defaultScaleBarUnit; //scale private double _scale; //Initial scale. private double _mapWidth; private int _pageWidth; - private double _lon1 ; + private double _lon1; private double _lon2; private double _lat; + private bool _forceRecalc; //bar private int _numTics = DefaultNumTics; @@ -129,13 +134,12 @@ protected override void OnRender(Graphics g, Map map) { if (!this.Enabled) return; - var rectF = g.ClipBounds; - + if (MapUnit == (int)Unit.Degree) { - var p1 = map.ImageToWorld(new PointF(0, map.Size.Height*0.5f)); - var p2 = map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height*0.5f)); + var p1 = map.ImageToWorld(new PointF(0, map.Size.Height * 0.5f)); + var p2 = map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height * 0.5f)); SetScaleD((int)g.DpiX, p1.X, p2.X, p1.Y, map.Size.Width); } else @@ -148,7 +152,7 @@ protected override void OnRender(Graphics g, Map map) #endregion #region Private render methods - + private void RenderScaleBar(Graphics g, Rectangle rc) { int width = rc.Right - rc.Left; @@ -168,12 +172,12 @@ private void RenderScaleBar(Graphics g, Rectangle rc) //m_locale.Init(); //Draw the bar. - CalcBarScale((int) g.DpiX, width, _numTics, _scale, _barUnitFactor, out pixelsPerTic, + CalcLargeOrSmallUnit((int)g.DpiX, width, _numTics, _scale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTick); - int nOffsetX = (width - _numTics*pixelsPerTic - _marginLeft - _marginRight)/2 + _marginLeft; - //left margin - int nOffsetY = (height - _barWidth)/2; - RenderBar(g, pixelsPerTic, rc.Left+nOffsetX, rc.Top + nOffsetY); + int nOffsetX = (width - _numTics * pixelsPerTic - _marginLeft - _marginRight) / 2 + _marginLeft; + //left margin + int nOffsetY = (height - _barWidth) / 2; + RenderBar(g, pixelsPerTic, rc.Left + nOffsetX, rc.Top + nOffsetY); RenderVerbalScale(g, rc.Left + width / 2, rc.Top + nOffsetY - GapScaleTextToBar); RenderSegmentText(g, rc.Left + nOffsetX, rc.Top + nOffsetY + _barWidth + GapBarToSegmentText, _numTics, pixelsPerTic, scaleBarUnitsPerTick, @@ -458,13 +462,14 @@ private void RenderVerbalScale(Graphics g, int x, int y) //Draw the text. RenderTextWithFormat(g, sbText, x, y, new StringFormat - {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far}, ref lastX); + { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far }, ref lastX); } - private static readonly StringFormat TopCenter = - new StringFormat { + private static readonly StringFormat TopCenter = + new StringFormat + { LineAlignment = StringAlignment.Near, - Alignment = StringAlignment.Center + Alignment = StringAlignment.Center }; /// @@ -481,23 +486,36 @@ private void RenderSegmentText(Graphics g, int x, int y, int tics, int ticWidth, string strUnit) { int lastX = int.MinValue; - RenderTextWithFormat(g, _barLabelText == ScaleBarLabelText.JustUnits ? "0" : strUnit, x, y, TopCenter, ref lastX); + string text; + int size; + int endX; + int offsetX; + + //Make sure this text is not overdrawn... (previously km could be partially truncated) + text = (_barLabelText == ScaleBarLabelText.JustUnits ? "0" : strUnit); + size = MeasureDisplayStringWidthExact(g, text, _font); + offsetX = 0; + if (x - size / 2f < _boundingRectangle.Left) + { + offsetX = _boundingRectangle.Left + (int)Math.Ceiling(size / 2f) - x; + } + RenderTextWithFormat(g, text, x + offsetX, y, TopCenter, ref lastX); lastX = int.MinValue; //Set the output format. - int precision = PrecitionOfSegmentText(scaleBarUnitsPerTic); + int precision = PrecisionOfSegmentText(scaleBarUnitsPerTic); string format = String.Format("F{0}", precision); for (int i = 1; i <= tics; i++) { - double value = scaleBarUnitsPerTic*i; - string text = value.ToString(format, System.Globalization.CultureInfo.CurrentUICulture); - int offsetX = 0; + double value = scaleBarUnitsPerTic * i; + text = value.ToString(format, System.Globalization.CultureInfo.CurrentUICulture); + offsetX = 0; if (i == tics) { //Make sure this text is not overdrawn... (should be aligned with ticmark) - var size = MeasureDisplayStringWidthExact(g, text, _font); - int endX = x + ticWidth * i + size; + size = MeasureDisplayStringWidthExact(g, text, _font); + endX = x + ticWidth * i + (int)Math.Ceiling(size / 2f); if (endX > _boundingRectangle.Right) { offsetX = _boundingRectangle.Right - endX; @@ -531,7 +549,7 @@ private void RenderTextWithFormat(Graphics g, string text, int x, int y, StringF if (x - size.Width / 2 < lastX) return; break; case StringAlignment.Near: - if (x < lastX) return; + if (x < lastX) return; break; } @@ -542,10 +560,10 @@ private void RenderTextWithFormat(Graphics g, string text, int x, int y, StringF switch (format.Alignment) { case StringAlignment.Far: - lastX = x + (int) size.Width; + lastX = x + (int)size.Width; break; case StringAlignment.Center: - lastX = x + (int) (size.Width/2); + lastX = x + (int)(size.Width / 2); break; case StringAlignment.Near: lastX = x; @@ -586,7 +604,9 @@ public Color ForeColor /// /// Gets or sets the font to label the bar /// - public Font Font { get { return _font; } + public Font Font + { + get { return _font; } set { if (value == null) @@ -644,10 +664,15 @@ public int BarWidth private string _mapUnitName, _mapUnitShortName; /// - /// Factor derived internally from BarUnit + /// Factors derived internally from BarUnit(s) /// - protected double _barUnitFactor; + private double _barUnitFactor; + private double _barUnitFactorLargeScale; + private double _barUnitFactorSmallScale; + private string _barUnitName, _barUnitShortName; + private string _barUnitNameLargeScale, _barUnitShortNameLargeScale; + private string _barUnitNameSmallScale, _barUnitShortNameSmallScale; /// /// Map unit @@ -668,13 +693,89 @@ public int MapUnit /// /// Bar unit /// - public virtual int BarUnit + [Obsolete("Use BarUnitLargeScale and BarUnitSmallScale")] + public int BarUnit { - get { return _barUnit; } + get { return _obsBarUnit; } set { - _barUnit = value; - GetUnitInformation(_barUnit, out _barUnitFactor, out _barUnitName, out _barUnitShortName); + //_barUnit = value; + //GetUnitInformation(_barUnit, out _barUnitFactor, out _barUnitName, out _barUnitShortName); + //CalcScale(96); + //OnViewChanged(); + //Dirty = true; + + _obsBarUnit = value; + + if (Units.TryGetValue(value, out UnitInfo unitInfo)) + { + switch ((Unit)value) + { + case Unit.Meter: + case Unit.Kilometer: + case Unit.Nautical_Mile: + { + BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; + return; + } + + case Unit.Foot_US: + case Unit.Yard_Indian: + case Unit.Yard_Sears: + { + BarUnitLargeScale = value; + BarUnitSmallScale = (int)Unit.Mile_US; + return; + } + + case Unit.Mile_US: + { + BarUnitLargeScale = (int)Unit.Yard_Sears; + BarUnitSmallScale = (int)Unit.Mile_US; + return; + } + + case Unit.Degree: + { + BarUnitLargeScale = (int)Unit.Degree; + BarUnitSmallScale = (int)Unit.Degree; + return; + } + + default: + { + BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; + return; + } + } + } + else + { + BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; + return; + } + } + } + + /// + /// Bar Unit for use at large scales (small area) such as ft, m, or yd + /// + public int BarUnitLargeScale + { + get { return _barUnitLargeScale; } + set + { + GetUnitInformation(value, out double d, out _barUnitNameLargeScale, out _barUnitShortNameLargeScale); + + if (d > 1 || value == (int)Unit.Degree) + throw new ArgumentOutOfRangeException("BarUnitLargeScale must be the smaller unit such as ft, m, or yd"); + + _barUnitLargeScale = value; + _barUnitFactorLargeScale = d; + _forceRecalc = true; CalcScale(96); OnViewChanged(); Dirty = true; @@ -682,9 +783,27 @@ public virtual int BarUnit } /// - /// Extract parameters for specified scale bar unit + /// Bar Unit for use at small scales (large area) such as km, mile, NM /// - protected static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, + public int BarUnitSmallScale + { + get { return _barUnitSmallScale; } + set + { + GetUnitInformation(value, out double d, out _barUnitNameSmallScale, out _barUnitShortNameSmallScale); + + if (d < 1 && value != (int)Unit.Degree) + throw new ArgumentOutOfRangeException("BarUnitSmallScale must be larger unit such as such as km, mi, nm, or deg"); + + _barUnitSmallScale = value; + _barUnitFactorSmallScale = d; + _forceRecalc = true; + CalcScale(96); + OnViewChanged(); + Dirty = true; + } + } + private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, out string mapUnitShortName) { UnitInfo unitInfo; @@ -852,7 +971,7 @@ private string ScaleBarText(double scale, ScaleBarLabelText scaleText) //set the precision. Keep the first 5 (ScalePrecisionDigits) digits. if (scale > 0) { - var magnitude = (int) (Math.Log10(scale)); + var magnitude = (int)(Math.Log10(scale)); precision = ScalePrecisionDigits - magnitude; if (precision < 0) precision = 0; @@ -864,7 +983,7 @@ private string ScaleBarText(double scale, ScaleBarLabelText scaleText) var format = string.Format("N{0}", precision); scale = FormatRealScale(scale); - return "1:" + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); + return "1 : " + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); } } @@ -915,14 +1034,14 @@ public int MarginRight /// /// Is this required? /// - protected virtual void OnViewChanged() + private void OnViewChanged() { } /// /// Gets or (private) sets whether the display settings for the scale bar have been changed /// - public bool Dirty { get; protected set; } + public bool Dirty { get; private set; } #endregion @@ -932,7 +1051,7 @@ protected virtual void OnViewChanged() private class UnitInfo { public readonly int Unit; - + public readonly double ToMeter; public readonly string Name; public readonly string Abbreviation; @@ -960,7 +1079,7 @@ private static double GetRoundIncrement(double startValue) double multiplier = Math.Pow(10, nPower); //Mulitiplier, =10^exp, to apply to nice numbers. for (int i = 0; i < NiceNumber; i++) { - candidate = NiceNumberArray[i]*multiplier; + candidate = NiceNumberArray[i] * multiplier; if (candidate > startValue) return candidate; } @@ -968,21 +1087,75 @@ private static double GetRoundIncrement(double startValue) return candidate; //return the maximum } - /// - /// Calculate scale bar tic size based upon current BarUnit - /// - protected virtual void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + if (_forceRecalc) + { + // revert to large scale unit + _barUnit = BarUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + _forceRecalc = false; + } + + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTic); + + if (BarUnitLargeScale != BarUnitSmallScale) + { + if (_barUnitFactor == _barUnitFactorSmallScale) + { + // currently on SmallScale units... + // check how many scale bar units if using LargeScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorLargeScale, + out int chkPixelsPerTick, out double chkScaleBarUnitsPerTic); + + // check if LargeScale bar length < 1 SmallScale unit + if (NumTicks * chkScaleBarUnitsPerTic * _barUnitFactorLargeScale < _barUnitFactorSmallScale) + { + // switch to LargeScale units + _barUnit = _barUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + + pixelsPerTic = chkPixelsPerTick; + scaleBarUnitsPerTic = chkScaleBarUnitsPerTic; + } + } + else + { + // currently on LargeScale units... + // check if LargeScale bar length >= 1 SmallScale unit (ie LargeScale units never exceed 1 SmallScale unit) + if (NumTicks * scaleBarUnitsPerTic * _barUnitFactorLargeScale >= _barUnitFactorSmallScale) + { + // recalc for SmallScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, + out pixelsPerTic, out scaleBarUnitsPerTic); + + // switch to SmallScale units + _barUnit = _barUnitSmallScale; + _barUnitFactor = _barUnitFactorSmallScale; + _barUnitName = _barUnitNameSmallScale; + _barUnitShortName = _barUnitShortNameSmallScale; + } + } + } + } + + private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, out int pixelsPerTic, out double scaleBarUnitsPerTic) { int minPixelsPerTic = widthOnDevice / (numTics * 2); - double barScale = mapScale/fBarUnitFactor; + double barScale = mapScale / fBarUnitFactor; int pixelsPerInch = dpi; - double barUnitsPerPixel = barScale*GeoSpatialMath.MetersPerInch/pixelsPerInch; + double barUnitsPerPixel = barScale * GeoSpatialMath.MetersPerInch / pixelsPerInch; //calculate the result - scaleBarUnitsPerTic = minPixelsPerTic*barUnitsPerPixel; + scaleBarUnitsPerTic = minPixelsPerTic * barUnitsPerPixel; scaleBarUnitsPerTic = GetRoundIncrement(scaleBarUnitsPerTic); - pixelsPerTic = (int) (scaleBarUnitsPerTic/barUnitsPerPixel); + pixelsPerTic = (int)(scaleBarUnitsPerTic / barUnitsPerPixel); } /// @@ -992,26 +1165,27 @@ private static double FormatRealScale(double scale) { double roundedScale; - var rfMagnitude = (int) (Math.Log10(scale)); + var rfMagnitude = (int)(Math.Log10(scale)); var factor = Math.Pow(10, rfMagnitude - ScalePrecisionDigits); if (Math.Abs(factor - 0) > 1e6) - roundedScale = (int) ((scale/factor) + 0.5)*factor; + roundedScale = (int)((scale / factor) + 0.5) * factor; else - roundedScale = (int) (scale + 0.5); + roundedScale = (int)(scale + 0.5); return roundedScale; } /// /// Return the precision for the segment text of the scale bar. /// - private static int PrecitionOfSegmentText(double value) + private static int PrecisionOfSegmentText(double value) { int precision = 0; - if (value < 1 && value > 0) + // handle values where Log10 is < 1 (ensure precision=0 when value=2.0, and precision=1 when value=2.5) + if (value < 10 && value > 0 && value - (int)value > 0.01) { - precision = (int) Math.Ceiling(Math.Abs(Math.Log10(value))); - double f = value*Math.Pow(10, precision); - if (f - (int) f > 0.01) + precision = (int)Math.Ceiling(Math.Abs(Math.Log10(value))); + double f = value * Math.Pow(10, precision); + if (f - (int)f > 0.01) precision++; } return precision; diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs deleted file mode 100644 index 3fd1100e..00000000 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBarAltUnit.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System; - -namespace SharpMap.Rendering.Decoration.ScaleBar -{ - /// - /// Scale Bar map decoration with switching between units for large and small scales - /// - [Serializable] - public class ScaleBarAltUnit : ScaleBar - { - //NB defaults set during base class initialisation - private int _barUnitAlt1; - private int _barUnitAlt2; - - private double _barUnitFactorAlt1; - private double _barUnitFactorAlt2; - - private Boolean _forceIt = false; - - /// - /// Creates an instance of this class - /// - public ScaleBarAltUnit() - { - BarUnitAlt1 = (int)Unit.Meter; - BarUnitAlt2 = (int)Unit.Kilometer; - } - - /// - /// Pseudo-internal ScaleBar unit for rendering, not intended to be set directly. Instead, use BarUnitAlt1 and BarUnitAlt2. - /// - public override int BarUnit - { - get => base.BarUnit; - set - { - base.BarUnit = value; - // This effectively reverts to standard ScaleBar behaviour. - _barUnitAlt1 = BarUnit; - _barUnitFactorAlt1 = _barUnitFactor; - _barUnitAlt2 = BarUnit; - _barUnitFactorAlt2 = _barUnitFactor; - } - } - - /// - /// Bar Unit for use at large scales (small area) such as ft, m, or yd - /// - public int BarUnitAlt1 - { - get { return _barUnitAlt1; } - set - { - GetUnitInformation(value, out double d, out string s1, out string s2); - - if (d > 1 || value == (int)Unit.Degree) - throw new ArgumentOutOfRangeException("BarUnitAlt1 must be the smaller unit such as ft, m, or yd"); - - _barUnitAlt1 = value; - _barUnitFactorAlt1 = d; - _forceIt = true; - OnViewChanged(); - Dirty = true; - } - } - /// - /// Bar Unit for use at small scales (large area) such as km, mile, NM - /// - public int BarUnitAlt2 - { - get { return _barUnitAlt2; } - set - { - GetUnitInformation(value, out double d, out string s1, out string s2); - - if (d < 1 && value != (int)Unit.Degree) - throw new ArgumentOutOfRangeException("BarUnitAlt2 must be larger unit such as such as km, mi, nm, or deg"); - - _barUnitAlt2 = value; - _barUnitFactorAlt2 = d; - _forceIt = true; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Calculate scale bar intervals, plugging BarUnitAlt1 or BarUnitAlt2 into base class BarUnit if change is required - /// - protected override void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, out int pixelsPerTic, out double scaleBarUnitsPerTic) - { - // if user has changed BarUnitAlt1 or BarUnitAlt2 then forcefully change base BarUnit - if (_forceIt) - base.BarUnit = BarUnitAlt1; - - // now calc intervals for current BarUnitAltX - base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out int pixelsPerTicAlt, out double scaleBarUnitsPerTicAlt); - // prelim values - pixelsPerTic = pixelsPerTicAlt; - scaleBarUnitsPerTic = scaleBarUnitsPerTicAlt; - - // check if need changing - if (_forceIt || _barUnitAlt1 != _barUnitFactorAlt2) - { - if (base._barUnitFactor != _barUnitFactorAlt1) - { - // calculate ScaleBarUnitsPerTic for SMALLER unit - base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorAlt1, out int pixelsPerTicSmaller, out double scaleBarUnitsPerTicSmaller); - - // Switch from LARGER unit to SMALLER unit when LESS than 1 larger unit - if (NumTicks * scaleBarUnitsPerTicSmaller * _barUnitFactorAlt1 < _barUnitFactorAlt2) - { - base.BarUnit = _barUnitAlt1; - // using calcs for SMALLER unit - pixelsPerTic = pixelsPerTicSmaller; - scaleBarUnitsPerTic = scaleBarUnitsPerTicSmaller; - } - } - else - { - // Switch to LARGER unit when >= 1 larger unit (ie smaller units never exceed 1 larger unit) - // scaleBarUnitsPerTicAlt is the SMALLER unit - if (NumTicks * scaleBarUnitsPerTicAlt * _barUnitFactorAlt1 >= _barUnitFactorAlt2) - { - base.BarUnit = _barUnitAlt2; - // recalc for LARGER unit - base.CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorAlt2, out pixelsPerTicAlt, out scaleBarUnitsPerTicAlt); - pixelsPerTic = pixelsPerTicAlt; - scaleBarUnitsPerTic = scaleBarUnitsPerTicAlt; - } - } - } - _forceIt = false; - } - } -} diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index 72e25a55..1527ffc9 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -136,7 +136,6 @@ Code - From 2ef516fa002addaec77d07d0e50358ba6225b3c1 Mon Sep 17 00:00:00 2001 From: Tim Cook Date: Mon, 30 Apr 2018 10:21:16 +0700 Subject: [PATCH 049/186] Upgrade ScaleBar to support large and small scale units --- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 88 ++++++++++++------- SharpMap/Utilities/GeoSpatialMath.cs | 4 +- 2 files changed, 57 insertions(+), 35 deletions(-) diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index 0bb06d76..3bcec2fc 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -10,6 +10,11 @@ namespace SharpMap.Rendering.Decoration.ScaleBar Developer : Simen Contact : SimenWu@hotmail.com Last Modified: 03/03/2003 + + April 2018 : Add support for large and small units with auto switching depending on map scale + : Change unit factor for Degrees; add new unit Nautical Mile + : Tweak label text placement + : Tweak calcs when MapUnits = degrees */ /// @@ -49,13 +54,13 @@ static ScaleBar() { Units.Add((int)Unit.Custom, new UnitInfo((int)Unit.Custom, 1.0, "Unknown", "Unknown")); Units.Add((int)Unit.Meter, new UnitInfo((int)Unit.Meter, 1, "Meter", "m")); - Units.Add((int)Unit.Foot_US, new UnitInfo((int)Unit.Custom, 0.30480061, "Foot_US", "ft")); - Units.Add((int)Unit.Yard_Sears, new UnitInfo((int)Unit.Custom, 0.914398415, "Yards", "yard")); - Units.Add((int)Unit.Yard_Indian, new UnitInfo((int)Unit.Custom, 0.914398531, "Yards", "Unknown")); - Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Custom, 1609.347219, "Miles", "mi")); - Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Custom, 1000.0, "Kilometers", "km")); - Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Custom, 0.0175, "Degree", "d")); - Units.Add((int)Unit.Nautical_Mile, new UnitInfo((int)Unit.Custom, 1852, "Nautical Mile", "NM")); + Units.Add((int)Unit.Foot_US, new UnitInfo((int)Unit.Foot_US, 0.30480061, "Foot_US", "ft")); + Units.Add((int)Unit.Yard_Sears, new UnitInfo((int)Unit.Yard_Sears, 0.914398415, "Yards", "yard")); + Units.Add((int)Unit.Yard_Indian, new UnitInfo((int)Unit.Yard_Indian, 0.914398531, "Yards", "Unknown")); + Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Mile_US, 1609.347219, "Miles", "mi")); + Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Kilometer, 1000.0, "Kilometers", "km")); + Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Degree, GeoSpatialMath.MetersPerDegreeAtEquator, "Degree", "d")); + Units.Add((int)Unit.Nautical_Mile, new UnitInfo((int)Unit.Nautical_Mile, 1852, "Nautical Mile", "NM")); } /// @@ -64,8 +69,9 @@ static ScaleBar() public ScaleBar() { MapUnit = (int)Unit.Meter; - BarUnitLargeScale = (int)Unit.Meter; + // set bigger unit first BarUnitSmallScale = (int)Unit.Kilometer; + BarUnitLargeScale = (int)Unit.Meter; Scale = 1; Width = DefaultWidth; } @@ -715,8 +721,9 @@ public int BarUnit case Unit.Kilometer: case Unit.Nautical_Mile: { - BarUnitLargeScale = (int)Unit.Meter; + // set bigger unit of measure first BarUnitSmallScale = (int)Unit.Kilometer; + BarUnitLargeScale = (int)Unit.Meter; return; } @@ -724,44 +731,47 @@ public int BarUnit case Unit.Yard_Indian: case Unit.Yard_Sears: { - BarUnitLargeScale = value; + // set bigger unit of measure first BarUnitSmallScale = (int)Unit.Mile_US; + BarUnitLargeScale = value; return; } case Unit.Mile_US: { - BarUnitLargeScale = (int)Unit.Yard_Sears; + // set bigger unit of measure first BarUnitSmallScale = (int)Unit.Mile_US; + BarUnitLargeScale = (int)Unit.Yard_Sears; return; } case Unit.Degree: { - BarUnitLargeScale = (int)Unit.Degree; + // set bigger unit of measure first BarUnitSmallScale = (int)Unit.Degree; + BarUnitLargeScale = (int)Unit.Degree; return; } default: { - BarUnitLargeScale = (int)Unit.Custom; BarUnitSmallScale = (int)Unit.Custom; + BarUnitLargeScale = (int)Unit.Custom; return; } } } else { - BarUnitLargeScale = (int)Unit.Custom; BarUnitSmallScale = (int)Unit.Custom; + BarUnitLargeScale = (int)Unit.Custom; return; } } } /// - /// Bar Unit for use at large scales (small area) such as ft, m, or yd + /// Bar Unit for use at large scales (small area) such as ft, m, or yd. /// public int BarUnitLargeScale { @@ -770,8 +780,8 @@ public int BarUnitLargeScale { GetUnitInformation(value, out double d, out _barUnitNameLargeScale, out _barUnitShortNameLargeScale); - if (d > 1 || value == (int)Unit.Degree) - throw new ArgumentOutOfRangeException("BarUnitLargeScale must be the smaller unit such as ft, m, or yd"); + if (d > _barUnitFactorSmallScale) //d > 1 && value != (int)Unit.Degree + throw new ArgumentOutOfRangeException("typically ft, m, or yd (unit of measure must be <= unit specified for BarUnitSmallScale"); _barUnitLargeScale = value; _barUnitFactorLargeScale = d; @@ -783,7 +793,7 @@ public int BarUnitLargeScale } /// - /// Bar Unit for use at small scales (large area) such as km, mile, NM + /// Bar Unit for use at small scales (large area) such as km, mile, NM, Deg. /// public int BarUnitSmallScale { @@ -792,8 +802,8 @@ public int BarUnitSmallScale { GetUnitInformation(value, out double d, out _barUnitNameSmallScale, out _barUnitShortNameSmallScale); - if (d < 1 && value != (int)Unit.Degree) - throw new ArgumentOutOfRangeException("BarUnitSmallScale must be larger unit such as such as km, mi, nm, or deg"); + if (d < _barUnitFactorLargeScale) //d < 1 && + throw new ArgumentOutOfRangeException("typically km, mi, nm, or deg (unit of measure must be >= unit specified for BarUnitLargeScale"); _barUnitSmallScale = value; _barUnitFactorSmallScale = d; @@ -816,7 +826,7 @@ private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, ou else { mapUnitFactor = 1; - mapUnitName = "Cusom"; + mapUnitName = "Custom"; mapUnitShortName = string.Empty; } } @@ -881,10 +891,21 @@ public void SetCustomUnit(double factor, string name, string shortName) _mapUnitShortName = shortName; //Bar Unit - _barUnitFactor = factor; - _barUnitName = name; - _barUnitShortName = shortName; + //_barUnitFactor = factor; + //_barUnitName = name; + //_barUnitShortName = shortName; + + _barUnitLargeScale = (int)Unit.Custom; + _barUnitFactorLargeScale = factor; + _barUnitNameLargeScale = name; + _barUnitShortNameLargeScale = shortName; + _barUnitSmallScale = (int)Unit.Custom; + _barUnitFactorSmallScale = factor; + _barUnitNameSmallScale = name; + _barUnitShortNameSmallScale = shortName; + + _forceRecalc = true; CalcScale(96); OnViewChanged(); } @@ -1132,7 +1153,7 @@ private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, doubl { // recalc for SmallScale unit CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, - out pixelsPerTic, out scaleBarUnitsPerTic); + out pixelsPerTic, out scaleBarUnitsPerTic); // switch to SmallScale units _barUnit = _barUnitSmallScale; @@ -1180,14 +1201,15 @@ private static double FormatRealScale(double scale) private static int PrecisionOfSegmentText(double value) { int precision = 0; - // handle values where Log10 is < 1 (ensure precision=0 when value=2.0, and precision=1 when value=2.5) - if (value < 10 && value > 0 && value - (int)value > 0.01) - { - precision = (int)Math.Ceiling(Math.Abs(Math.Log10(value))); - double f = value * Math.Pow(10, precision); - if (f - (int)f > 0.01) - precision++; - } + // handle values where Log10 is < 1 (eg ensure precision=0 when value=2.0, and precision=1 when value=2.5) + if (value < 10 && value > 0) + if (value < 1 || value - (int)value > 0.01) + { + precision = (int)Math.Ceiling(Math.Abs(Math.Log10(value))); + double f = value * Math.Pow(10, precision); + if (f - (int)f > 0.01) + precision++; + } return precision; } diff --git a/SharpMap/Utilities/GeoSpatialMath.cs b/SharpMap/Utilities/GeoSpatialMath.cs index a221b637..b00228a9 100644 --- a/SharpMap/Utilities/GeoSpatialMath.cs +++ b/SharpMap/Utilities/GeoSpatialMath.cs @@ -58,7 +58,7 @@ public static double GreatCircleDistance(double lon1, double lat1, double lon2, /// The distance in meters public static double GreatCircleDistance(double lon1, double lon2, double lat) { - var lonDistance = DiffLongitude(lon1, lon2); + var lonDistance = Math.Abs(lon2 - lon1);//DiffLongitude(lon1, lon2); lat = Math.Abs(lat); if (lat >= 90.0) lat = 89.999; @@ -99,4 +99,4 @@ public static double DiffLongitude(double lon1, double lon2) return diff; } } -} \ No newline at end of file +} From 0706b52b17d7ab2c9012306c6a0a4e171c0bf03f Mon Sep 17 00:00:00 2001 From: Tim C Date: Mon, 7 May 2018 23:13:42 +0700 Subject: [PATCH 050/186] Fix raster symbol not centred on point when scale != 1 and/or rotation is applied. --- .../Rendering/Symbolizer/PointSymbolizer.cs | 27 +++-- .../Symbolizer/RasterPointSymbolizer.cs | 11 +- .../Symbolizer/RasterPointSymbolizerTest.cs | 106 ++++++++++++++++++ UnitTests/UnitTests.csproj | 1 + 4 files changed, 128 insertions(+), 17 deletions(-) create mode 100644 UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs diff --git a/SharpMap/Rendering/Symbolizer/PointSymbolizer.cs b/SharpMap/Rendering/Symbolizer/PointSymbolizer.cs index 32abcdfd..ef5668ab 100644 --- a/SharpMap/Rendering/Symbolizer/PointSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/PointSymbolizer.cs @@ -53,7 +53,7 @@ public abstract Size Size get; set; } - + /// /// Gets or sets the scale /// @@ -93,24 +93,27 @@ protected void RenderPoint(MapViewport map, Coordinate point, Graphics g) PointF pp = map.WorldToImage(point); - pp = PointF.Add(pp, GetOffset()); if (Rotation != 0f && !Single.IsNaN(Rotation)) { + SizeF offset = GetOffset(); + Matrix startingTransform = g.Transform.Clone(); Matrix transform = g.Transform; + transform.Translate(offset.Width + 1, offset.Height + 1); PointF rotationCenter = pp; - transform.RotateAt(Rotation, rotationCenter); + transform.RotateAt(Rotation, rotationCenter, MatrixOrder.Append); g.Transform = transform; - + OnRenderInternal(pp, g); g.Transform = startingTransform; } else { + pp = PointF.Add(pp, GetOffset()); OnRenderInternal(pp, g); } } @@ -136,13 +139,13 @@ public virtual IPointSymbolizer ToRasterPointSymbolizer() } return new RasterPointSymbolizer - { - Offset = Offset, - Rotation = Rotation, - Scale = Scale, - //ImageAttributes = new ImageAttributes(), - Symbol = bitmap - }; + { + Offset = Offset, + Rotation = Rotation, + Scale = Scale, + //ImageAttributes = new ImageAttributes(), + Symbol = bitmap + }; } /// @@ -164,4 +167,4 @@ public void Render(MapViewport map, IPuntal geometry, Graphics graphics) } } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs b/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs index 7f20d9f0..69c0856b 100644 --- a/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs @@ -64,7 +64,7 @@ public float Transparency set { _transparency = value; - + if (_imageAttributes != null) _imageAttributes.Dispose(); @@ -83,7 +83,7 @@ public override object Clone() { var res = (RasterPointSymbolizer)MemberwiseClone(); res.Transparency = Transparency; - res.Symbol= (Image)Symbol.Clone(); + res.Symbol = (Image)Symbol.Clone(); return res; } @@ -115,9 +115,10 @@ public override Size Size { get { - + //return native size. Any required scaling is applied during render - see + //PointSymbolizer::GetOffset and RasterPointSymbolizer::OnRenderInternal var size = Symbol == null ? DefaultSymbol.Size : Symbol.Size; - return new Size((int)(Scale * size.Width), (int)(Scale * size.Height)); + return new Size((int)(size.Width), (int)(size.Height)); } set { @@ -175,4 +176,4 @@ internal override void OnRenderInternal(PointF pt, Graphics g) } } } -} \ No newline at end of file +} diff --git a/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs new file mode 100644 index 00000000..eb99bf3b --- /dev/null +++ b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs @@ -0,0 +1,106 @@ +using GeoAPI.Geometries; +using NetTopologySuite.Geometries; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UnitTests.Rendering.Symbolizer +{ + public class RasterPointSymbolizerScaleRotnTest + { + + [Test] + public void TestRasterPointSymbolizerScaleRotn() + { + //plugin Webmercator + var pcs = ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator; + SharpMap.Session.Instance.CoordinateSystemRepository.AddCoordinateSystem(3857, pcs); + + var m = CreateMap(); + m.ZoomToExtents(); + var img = m.GetMap(); + img.Save("C:\\Temp\\RasterPointSymbolizer.bmp", System.Drawing.Imaging.ImageFormat.Bmp); + } + + private SharpMap.Map CreateMap() + { + var m = new SharpMap.Map(new System.Drawing.Size(1440, 1080)) { BackColor = System.Drawing.Color.LightSkyBlue }; + m.SRID = 3857; + + var originX = 100.0; + var originY = 7.0; + var gap = 0.002; + + //create 4 layers varying scale only + m.Layers.Add(CreateRpsLayer(originX + 0 * gap, originY + 2 * gap, 1, 0)); + m.Layers.Add(CreateRpsLayer(originX + 1 * gap, originY + 2 * gap, 0.5f, 0)); + m.Layers.Add(CreateRpsLayer(originX + 2 * gap, originY + 2 * gap, 0.25f, 0)); + m.Layers.Add(CreateRpsLayer(originX + 3 * gap, originY + 2 * gap, 2, 0)); + + //create 4 layers varying rotn only + m.Layers.Add(CreateRpsLayer(originX + 0 * gap, originY + 1 * gap, 0, 45)); + m.Layers.Add(CreateRpsLayer(originX + 1 * gap, originY + 1 * gap, 0, 135)); + m.Layers.Add(CreateRpsLayer(originX + 2 * gap, originY + 1 * gap, 0, 225)); + m.Layers.Add(CreateRpsLayer(originX + 3 * gap, originY + 1 * gap, 0, 315)); + + //create 4 layers varying scale + rotn + m.Layers.Add(CreateRpsLayer(originX + 0 * gap, originY + 0 * gap, 1, 45)); + m.Layers.Add(CreateRpsLayer(originX + 1 * gap, originY + 0 * gap, 0.5f, 135)); + m.Layers.Add(CreateRpsLayer(originX + 2 * gap, originY + 0 * gap, 0.25f, 225)); + m.Layers.Add(CreateRpsLayer(originX + 3 * gap, originY + 0 * gap, 2, 315)); + + //create a pseudo-graticule for visual reference + LineString[] graticule = new LineString[7]; + graticule[0] = new LineString(new Coordinate[] { new Coordinate(originX - gap, originY + 0 * gap), new Coordinate(originX + 4 * gap, originY + 0 * gap) }); + graticule[1] = new LineString(new Coordinate[] { new Coordinate(originX - gap, originY + 1 * gap), new Coordinate(originX + 4 * gap, originY + 1 * gap) }); + graticule[2] = new LineString(new Coordinate[] { new Coordinate(originX - gap, originY + 2 * gap), new Coordinate(originX + 4 * gap, originY + 2 * gap) }); + + graticule[3] = new LineString(new Coordinate[] { new Coordinate(originX + 0 * gap, originY - gap), new Coordinate(originX + 0 * gap, originY + 3 * gap) }); + graticule[4] = new LineString(new Coordinate[] { new Coordinate(originX + 1 * gap, originY - gap), new Coordinate(originX + 1 * gap, originY + 3 * gap) }); + graticule[5] = new LineString(new Coordinate[] { new Coordinate(originX + 2 * gap, originY - gap), new Coordinate(originX + 2 * gap, originY + 3 * gap) }); + graticule[6] = new LineString(new Coordinate[] { new Coordinate(originX + 3 * gap, originY - gap), new Coordinate(originX + 3 * gap, originY + 3 * gap) }); + + var pr = new SharpMap.Data.Providers.GeometryFeatureProvider(graticule); + pr.SRID = 4326; + var vl = new SharpMap.Layers.VectorLayer("Graticule", pr); + vl.TargetSRID = 3857; + m.Layers.Add(vl); + + + return m; + } + + private SharpMap.Layers.VectorLayer CreateRpsLayer(double x, double y, float scale, float rot) + { + + NetTopologySuite.Geometries.Point[] pts = new NetTopologySuite.Geometries.Point[1]; + pts[0] = new NetTopologySuite.Geometries.Point(x, y); + var pr = new SharpMap.Data.Providers.GeometryFeatureProvider(pts); + pr.SRID = 4326; + var vl = new SharpMap.Layers.VectorLayer(string.Format("{0} {1} {2} {3}", x, y, scale, rot), pr); + vl.TargetSRID = 3857; + + var rps = new SharpMap.Rendering.Symbolizer.RasterPointSymbolizer(); + rps.Scale = scale; + rps.Rotation = rot; + //rps.Symbol = GetRasterSymbol(); + rps.Symbol = GetRasterSymbol(); + vl.Style.PointSymbolizer = rps; + + return vl; + + } + + private System.Drawing.Image GetRasterSymbol() + { + var str = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAE8SURBVHhe7dpRDoIwEIThHpWbcHRkW2osJQouswTyTzLFWG3d79k0pTRd0bSqvXdF7fZpji1hzQOvsrzXfE7eKwC2hq8JR4gG+DZ8TShCJMCe4WvCEKIAjgxfE4IQAWCDjOM4vzwW+44cQQ3w7/A1cgQAhADe4WukCACIAM4avkaGEAkwDMOhfuYxAHtza4Ct4S0eAIsEAQAAytJtOLr8yC5eAAsAAOSzm/tcBQCAsnQbjgIAgD36AAAAAMur33kswJFu5dYAZwQAAPLZzX2uAgBAWboNRwEAwB6aAABAPru5z1UAAChLt+EoAADYQxMAAMhnN/e5CgAAZek2HAUAAHtoAgAA+ezmPlcBAKAs3YajAABgD00AACCf3dznKgAigK0/S3tzmz9LW89GkAxvfQMIaj/4zM6LoGl6AWGcInMnlc2ZAAAAAElFTkSuQmCC"; + byte[] imageBytes = Convert.FromBase64String(str); + System.IO.MemoryStream ms = new System.IO.MemoryStream(imageBytes, 0, imageBytes.Length); + ms.Write(imageBytes, 0, imageBytes.Length); + System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); + return image; + } + } +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 5a290bc8..e698f659 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -220,6 +220,7 @@ + From 2cf8db1902ae237a6de068c0361ce8eec791d465 Mon Sep 17 00:00:00 2001 From: terribletim Date: Wed, 4 Jul 2018 19:13:58 +0700 Subject: [PATCH 051/186] Support varying colour of RasterPointSymbolizer for thematic rendering (#102) * New prop SymbolColor to support color re-map for thematic rendering * Apply requested changes: public prop RemapColor and follow naming standards --- .../Symbolizer/RasterPointSymbolizer.cs | 81 ++++++++++++++++--- 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs b/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs index 69c0856b..61aa77da 100644 --- a/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs +++ b/SharpMap/Rendering/Symbolizer/RasterPointSymbolizer.cs @@ -38,6 +38,9 @@ public class RasterPointSymbolizer : PointSymbolizer private float _transparency = 0f; + private Color _symbolColor = Color.Empty; + private Color _remapColor = Color.Empty; + /// /// Releases managed resources /// @@ -58,23 +61,46 @@ protected override void ReleaseManagedResources() base.ReleaseManagedResources(); } + /// + /// Optional transparency in range 0 (opaque) to 1 (fully transparent). + /// public float Transparency { get { return _transparency; } set { + if (value < 0 || value > 1) + throw new ArgumentOutOfRangeException("Require value from 0 (opaque) to 1 (fully transparent)"); _transparency = value; + ConstructImageAttributes(); + } + } - if (_imageAttributes != null) - _imageAttributes.Dispose(); - - if (_transparency == 0) - return; + /// + /// Optional colour to replace the RemapColor pixels in Symbol. + /// If Transparency is also specified, transparency will replace SymbolColor.Alpha. + /// + public Color SymbolColor + { + get { return _symbolColor; } + set + { + _symbolColor = value; + ConstructImageAttributes(); + } + } - _imageAttributes = new ImageAttributes(); - var cm = new ColorMatrix(); - cm.Matrix33 = 1f - _transparency; - _imageAttributes.SetColorMatrix(cm); + /// + /// Optional colour to be replaced by SymbolColor during re-map. + /// Pixels must have an exact match (including RemapColor.Alpha) to be re-mapped. + /// + public Color RemapColor + { + get { return _remapColor; } + set + { + _remapColor = value; + ConstructImageAttributes(); } } @@ -84,6 +110,8 @@ public override object Clone() var res = (RasterPointSymbolizer)MemberwiseClone(); res.Transparency = Transparency; res.Symbol = (Image)Symbol.Clone(); + res.SymbolColor = SymbolColor; + res.RemapColor = RemapColor; return res; } @@ -104,6 +132,41 @@ internal ImageAttributes ImageAttributes } } + /// + /// Construct imageattribute based upon Transparency and/or Color Re-map + /// + private void ConstructImageAttributes() + { + if (_imageAttributes != null) + _imageAttributes.Dispose(); + + if (Transparency == 0 && (SymbolColor.ToArgb() == RemapColor.ToArgb())) + return; + + _imageAttributes = new ImageAttributes(); + + if (SymbolColor.ToArgb() != RemapColor.ToArgb()) + { + var cm = new ColorMap[1]; + + var a = SymbolColor.A; + + if (Transparency > 0) + a = (byte)(Math.Ceiling(255 * (1F - Transparency))); + + var nc = Color.FromArgb(a, SymbolColor); + cm[0] = new ColorMap(); + cm[0].OldColor = RemapColor; + cm[0].NewColor = nc; + ImageAttributes.SetRemapTable(cm); + } + else + { + var cm = new ColorMatrix(); + cm.Matrix33 = 1F - _transparency; + ImageAttributes.SetColorMatrix(cm); + } + } /// /// Gets or sets the Size of the symbol From 9f7f57b78cba6f30a5c9fec7f754f56daf9aff97 Mon Sep 17 00:00:00 2001 From: terribletim Date: Sat, 7 Jul 2018 15:43:04 +0700 Subject: [PATCH 052/186] Scale/Zoom dependant ITheme s (#103) * Supporting setting current Zoom and Scale on CustomTheme * Set current zoom/scale on CustomTheme to support scale-dependent rendering * Change to IThemeEx with associated implementation * Requested changes 2 --- SharpMap/Layers/VectorLayer.cs | 50 ++++++++++++++++-- SharpMap/Rendering/Thematics/CustomTheme.cs | 58 +++++++++++++++++---- SharpMap/Rendering/Thematics/ITheme.cs | 25 +++++++-- 3 files changed, 116 insertions(+), 17 deletions(-) diff --git a/SharpMap/Layers/VectorLayer.cs b/SharpMap/Layers/VectorLayer.cs index 67eed67e..300e16cd 100644 --- a/SharpMap/Layers/VectorLayer.cs +++ b/SharpMap/Layers/VectorLayer.cs @@ -253,6 +253,13 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope, IT double scale = map.GetMapScale((int)g.DpiX); double zoom = map.Zoom; + Func evalStyle; + + if (theme is IThemeEx) + evalStyle = new ThemeExEvaluator((IThemeEx)theme).GetStyle; + else + evalStyle = new ThemeEvaluator(theme).GetStyle; + foreach (FeatureDataTable features in ds.Tables) { // Transform geometries if necessary @@ -271,7 +278,7 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope, IT for (int i = 0; i < features.Count; i++) { var feature = features[i]; - var outlineStyle = theme.GetStyle(feature) as VectorStyle; + var outlineStyle = evalStyle(map, feature) as VectorStyle; if (outlineStyle == null) continue; if (!(outlineStyle.Enabled && outlineStyle.EnableOutline)) continue; @@ -303,7 +310,7 @@ protected void RenderInternal(Graphics g, MapViewport map, Envelope envelope, IT for (int i = 0; i < features.Count; i++) { var feature = features[i]; - var style = theme.GetStyle(feature); + var style = evalStyle(map, feature); if (style == null) continue; if (!style.Enabled) continue; @@ -621,8 +628,43 @@ public object Clone() var res = (VectorLayer)MemberwiseClone(); res.Style = Style.Clone(); if (Theme is ICloneable) - res.Theme = (ITheme)((ICloneable)Theme).Clone(); + res.Theme = (IThemeEx)((ICloneable)Theme).Clone(); return res; } + + #region Theme evaluators + private abstract class ThemeEvaluatorBase + { + public abstract IStyle GetStyle(MapViewport mvp, FeatureDataRow feature); + } + + private class ThemeEvaluator : ThemeEvaluatorBase + { + private readonly ITheme _theme; + + public ThemeEvaluator(ITheme theme) + { + _theme = theme; + } + public sealed override IStyle GetStyle(MapViewport mvp, FeatureDataRow feature) + { + return _theme.GetStyle(feature); + } + } + + private class ThemeExEvaluator : ThemeEvaluatorBase + { + private readonly IThemeEx _theme; + + public ThemeExEvaluator(IThemeEx theme) + { + _theme = theme; + } + public sealed override IStyle GetStyle(MapViewport mvp, FeatureDataRow feature) + { + return _theme.GetStyle(mvp, feature); + } + } + #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/Thematics/CustomTheme.cs b/SharpMap/Rendering/Thematics/CustomTheme.cs index 9486e3ed..1390ecf7 100644 --- a/SharpMap/Rendering/Thematics/CustomTheme.cs +++ b/SharpMap/Rendering/Thematics/CustomTheme.cs @@ -26,7 +26,7 @@ namespace SharpMap.Rendering.Thematics /// The CustomTheme class is used for defining your own thematic rendering by using a custom get-style-delegate. /// [Serializable] - public class CustomTheme : ITheme, ISerializable, ICloneable + public class CustomTheme : IThemeEx, ISerializable, ICloneable { #region Delegates @@ -84,7 +84,7 @@ public CustomTheme(GetStyleMethod getStyleMethod) { _getStyleDelegate = getStyleMethod; } - + /// /// Gets or sets the default style when an attribute isn't found in any bucket /// @@ -96,10 +96,11 @@ public IStyle DefaultStyle /// /// Gets or sets the style delegate used for determining the style of a feature + /// If map zoom/scale are also required by delegate then refer to and property /// /// /// The delegate must take a and return an . - /// If the method returns null, the default style will be used for rendering. + /// If the method returns null, the default style will be used for rendering (note - default style may be set to null if required). /// /// The example below creates a delegate that can be used for assigning the rendering of a road theme. If the road-class /// is larger than '3', it will be rendered using a thick red line. @@ -123,24 +124,61 @@ public GetStyleMethod StyleDelegate set { _getStyleDelegate = value; } } - #region ITheme Members + #region IThemeEx Members /// - /// Returns the color based on an attribute value + /// Returns the style based on an attribute value /// - /// DataRow + /// DataRow /// Style generated by GetStyle-Delegate - public IStyle GetStyle(FeatureDataRow row) + public IStyle GetStyle(FeatureDataRow feature) { - IStyle style = _getStyleDelegate(row); + IStyle style = _getStyleDelegate(feature); if (style != null) return style; else return _defaultStyle; } + /// + /// Returns the style based on an mapViewPort scale or zoom and/or attribute value(s) + /// + /// MapViewport + /// DataRow + /// Style generated by GetStyle-Delegate + public IStyle GetStyle(MapViewport mapViewPort, FeatureDataRow feature) + { + //return GetStyleDelegateEx?Invoke(mapViewPort, feature) ?? GetStyle(feature); + if (GetStyleDelegateEx != null) + return GetStyleDelegateEx.Invoke(mapViewPort, feature); + else + return GetStyle(feature); + } + #endregion + /// + /// Custom Style Delegate method providing access to current zoom/scale via MapViewport. GetStyleDelegateEx takes priority over GetStyle + /// + /// + /// GetStyleDelegateEx is used for determining the style of a feature. + /// Provide a lambda-style reference to public function in your implementation of CustomTheme + /// + /// + /// + /// Func < MapViewport, FeatureDataRow, IStyle> f = (mvp, fdr) => MyPublicFunction(mvp, fdr); + /// GetStyleDelegateEx = f; + /// + /// in which signature of MyPublicFunction is: + /// + /// public SharpMap.Styles.VectorStyle MyPublicFunction(MapViewport mapViewport, FeatureDataRow feature) + /// + /// + /// + /// + /// Style to be applied to feature + public Func GetStyleDelegateEx { get; set; } + #region ISerializable Members void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { @@ -153,10 +191,10 @@ public object Clone() { var res = (CustomTheme)MemberwiseClone(); res._defaultStyle = _defaultStyle is ICloneable - ? (IStyle) ((ICloneable) _defaultStyle).Clone() + ? (IStyle)((ICloneable)_defaultStyle).Clone() : _defaultStyle; return res; } } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/Thematics/ITheme.cs b/SharpMap/Rendering/Thematics/ITheme.cs index c21e4028..1d74894c 100644 --- a/SharpMap/Rendering/Thematics/ITheme.cs +++ b/SharpMap/Rendering/Thematics/ITheme.cs @@ -33,8 +33,27 @@ public interface ITheme /// /// Returns the style based on a feature /// - /// Set of attribute values to calculate the from + /// Set of attribute values to calculate the from /// The style - IStyle GetStyle(FeatureDataRow attribute); + IStyle GetStyle(FeatureDataRow feature); } -} \ No newline at end of file + + /// + /// Extended interface for rendering a thematic layer based upon current scale or zoom and/or feature attributes + /// + /// + /// Implementations of this interface should consider implementing + /// when they make use of , or likewise + /// objects of the namespace. Otherwise they are prone to GDI+ rendering exceptions. + /// + public interface IThemeEx: ITheme + { + /// + /// Calculates a style for a given based on a given . + /// + /// The viewport + /// The feature + /// A style + IStyle GetStyle(MapViewport mapViewPort, FeatureDataRow feature); + } +} From 0659b585ae2896d4c0406dccf1e7ef4a47220260 Mon Sep 17 00:00:00 2001 From: terribletim Date: Thu, 12 Jul 2018 19:37:49 +0700 Subject: [PATCH 053/186] Remove ArgumentOutOfRangeException when setting BarUnitLargeScale and BarUnitSmallScale (and hence requirement to set BarUnitSmallScale first); revert changes to static func GeoSpatialMath.GreatCircleDistance; add new static func GeoSpatialMath.GreatCirlceDistanceReflex for scale bar calcs (#104) --- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 25 +++++------------- SharpMap/Utilities/GeoSpatialMath.cs | 26 ++++++++++++++++--- SharpMap/Utilities/ScaleCalculations.cs | 2 +- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index 3bcec2fc..8a5796f7 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -69,9 +69,8 @@ static ScaleBar() public ScaleBar() { MapUnit = (int)Unit.Meter; - // set bigger unit first - BarUnitSmallScale = (int)Unit.Kilometer; BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; Scale = 1; Width = DefaultWidth; } @@ -721,9 +720,8 @@ public int BarUnit case Unit.Kilometer: case Unit.Nautical_Mile: { - // set bigger unit of measure first - BarUnitSmallScale = (int)Unit.Kilometer; BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; return; } @@ -731,40 +729,37 @@ public int BarUnit case Unit.Yard_Indian: case Unit.Yard_Sears: { - // set bigger unit of measure first - BarUnitSmallScale = (int)Unit.Mile_US; BarUnitLargeScale = value; + BarUnitSmallScale = (int)Unit.Mile_US; return; } case Unit.Mile_US: { - // set bigger unit of measure first - BarUnitSmallScale = (int)Unit.Mile_US; BarUnitLargeScale = (int)Unit.Yard_Sears; + BarUnitSmallScale = (int)Unit.Mile_US; return; } case Unit.Degree: { - // set bigger unit of measure first - BarUnitSmallScale = (int)Unit.Degree; BarUnitLargeScale = (int)Unit.Degree; + BarUnitSmallScale = (int)Unit.Degree; return; } default: { - BarUnitSmallScale = (int)Unit.Custom; BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; return; } } } else { - BarUnitSmallScale = (int)Unit.Custom; BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; return; } } @@ -780,9 +775,6 @@ public int BarUnitLargeScale { GetUnitInformation(value, out double d, out _barUnitNameLargeScale, out _barUnitShortNameLargeScale); - if (d > _barUnitFactorSmallScale) //d > 1 && value != (int)Unit.Degree - throw new ArgumentOutOfRangeException("typically ft, m, or yd (unit of measure must be <= unit specified for BarUnitSmallScale"); - _barUnitLargeScale = value; _barUnitFactorLargeScale = d; _forceRecalc = true; @@ -802,9 +794,6 @@ public int BarUnitSmallScale { GetUnitInformation(value, out double d, out _barUnitNameSmallScale, out _barUnitShortNameSmallScale); - if (d < _barUnitFactorLargeScale) //d < 1 && - throw new ArgumentOutOfRangeException("typically km, mi, nm, or deg (unit of measure must be >= unit specified for BarUnitLargeScale"); - _barUnitSmallScale = value; _barUnitFactorSmallScale = d; _forceRecalc = true; diff --git a/SharpMap/Utilities/GeoSpatialMath.cs b/SharpMap/Utilities/GeoSpatialMath.cs index b00228a9..307f6da7 100644 --- a/SharpMap/Utilities/GeoSpatialMath.cs +++ b/SharpMap/Utilities/GeoSpatialMath.cs @@ -50,7 +50,7 @@ public static double GreatCircleDistance(double lon1, double lat1, double lon2, } /// - /// Calculate the distance between 2 points on the great circle + /// Calculate the great circle distance between 2 points (ie the shortest distance on the sphere) /// /// The first longitue value /// The second longitue value @@ -58,7 +58,7 @@ public static double GreatCircleDistance(double lon1, double lat1, double lon2, /// The distance in meters public static double GreatCircleDistance(double lon1, double lon2, double lat) { - var lonDistance = Math.Abs(lon2 - lon1);//DiffLongitude(lon1, lon2); + var lonDistance = DiffLongitude(lon1, lon2); lat = Math.Abs(lat); if (lat >= 90.0) lat = 89.999; @@ -67,7 +67,27 @@ public static double GreatCircleDistance(double lon1, double lon2, double lat) } /// - /// Calculate the difference between two longitudal values + /// Calculate the great circle distance between 2 points without constraining longitudinal REFLEX angle 0-180deg (ie supports angles > 180 deg). + /// Typically used to support scale calculations on a global projection from longitude -180 to +180 (or even greater when zoomed out), + /// this will NOT be the shortest distance on the sphere when longitudinal angle > 180 degrees. + /// + /// The first longitude value + /// The second longitude value + /// The common latitude value for and + /// The distance in meters from LHS to RHS of a global projection. + /// This will NOT the shortest distance on sphere for longitudinal REFLEX (> 180deg) angles + public static double GreatCircleDistanceReflex(double lon1, double lon2, double lat) + { + var lonDistance = Math.Abs(lon2 - lon1); + lat = Math.Abs(lat); + if (lat >= 90.0) + lat = 89.999; + var distance = Math.Cos(lat * DegToRad) * MetersPerDegreeAtEquator * lonDistance; + return distance; + } + + /// + /// Calculate the difference between two longitudal values constrained 0 - 180 deg /// /// The first longitue value in degrees /// The second longitue value in degrees diff --git a/SharpMap/Utilities/ScaleCalculations.cs b/SharpMap/Utilities/ScaleCalculations.cs index f2aca83c..c21a17f7 100644 --- a/SharpMap/Utilities/ScaleCalculations.cs +++ b/SharpMap/Utilities/ScaleCalculations.cs @@ -74,7 +74,7 @@ public static double CalculateScaleNonLatLong(double mapWidthMeters, double mapS /// public static double CalculateScaleLatLong(double lon1, double lon2, double lat, double widthPage, int dpi) { - double distance = GeoSpatialMath.GreatCircleDistance(lon1, lon2, lat); + double distance = GeoSpatialMath.GreatCircleDistanceReflex(lon1, lon2, lat); double r = CalculateScaleNonLatLong(distance, widthPage, 1, dpi); return r; } From 25f866ac7574ad9a0e8725ae37e669aaf040706f Mon Sep 17 00:00:00 2001 From: terribletim Date: Mon, 16 Jul 2018 20:54:27 +0700 Subject: [PATCH 054/186] Lyr geom hardening (#101) * White space normalisation * Ensure Layer.TargetSRID resets CoordTransform appropriately (and handle Layer.SRID in the same manner); Handle null box in GeometryTransform without throwing error; Handle invalid OID in GeometryFeatureProvider.GetGeometryById without throwing error. * Add UnitTest; ensure VectorLayer and LabelLayer call base.SRID; Expose SRID and TargetSRID on GroupLayer; modify GroupLayer cloning to preserve any defined Transformations (and modify associated Unit Test); * Included UnitTest proj file and update comments in UnitTest * Add UnitTest for setting layer CoordTrans directly; fix long-standing issue highlighted by new test where ReverseCoordinateTransformation is not cleared; --- .../Transformations/GeometryTransform.cs | 19 +- .../Data/Providers/GeometryFeatureProvider.cs | 14 +- SharpMap/Layers/LabelLayer.cs | 8 +- SharpMap/Layers/Layer.cs | 103 ++++-- SharpMap/Layers/LayerGroup.cs | 56 +++- SharpMap/Layers/VectorLayer.cs | 6 +- .../Layers/CoordinateTransformationTest.cs | 307 ++++++++++++++++++ UnitTests/Layers/LayerGroupTest.cs | 24 +- UnitTests/UnitTests.csproj | 1 + 9 files changed, 480 insertions(+), 58 deletions(-) create mode 100644 UnitTests/Layers/CoordinateTransformationTest.cs diff --git a/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs b/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs index 7370afa4..a97a152a 100644 --- a/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs +++ b/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs @@ -36,8 +36,11 @@ public static Envelope TransformBox(Envelope box, IMathTransform transform) { if (box == null) return null; - - var corners = new [] { + + if (box.IsNull) + return new Envelope(box); + + var corners = new[] { transform.Transform(new Coordinate(box.MinX, box.MinY)), transform.Transform(new Coordinate(box.MinX, box.MaxY)), transform.Transform(new Coordinate(box.MaxX, box.MinY)), @@ -98,7 +101,7 @@ public static Coordinate TransformCoordinate(Coordinate c, IMathTransform transf private static Coordinate[] TransformCoordinates(Coordinate[] c, IMathTransform transform) { var res = new Coordinate[c.Length]; - for (var i = 0; i < c.Length; i++ ) + for (var i = 0; i < c.Length; i++) { var ordinates = transform.Transform(c[i].ToDoubleArray()); res[i] = new Coordinate(ordinates[0], ordinates[1]); @@ -117,8 +120,8 @@ public static IPoint TransformPoint(IPoint p, IMathTransform transform, IGeometr { try { - - return targetFactory.CreatePoint(TransformCoordinate(p.Coordinate, transform)); + + return targetFactory.CreatePoint(TransformCoordinate(p.Coordinate, transform)); } catch { @@ -173,7 +176,7 @@ public static ILinearRing TransformLinearRing(ILinearRing r, IMathTransform tran /// Transformed Polygon public static IPolygon TransformPolygon(IPolygon p, IMathTransform transform, IGeometryFactory targetFactory) { - var shell = TransformLinearRing((ILinearRing) p.ExteriorRing, transform, targetFactory); + var shell = TransformLinearRing((ILinearRing)p.ExteriorRing, transform, targetFactory); ILinearRing[] holes = null; var holesCount = p.NumInteriorRings; if (holesCount > 0) @@ -227,7 +230,7 @@ public static IMultiPolygon TransformMultiPolygon(IMultiPolygon polys, IMathTran var polyList = new IPolygon[polys.NumGeometries]; for (var i = 0; i < polys.NumGeometries; i++) { - var poly = (IPolygon) polys[i]; + var poly = (IPolygon)polys[i]; polyList[i] = TransformPolygon(poly, transform, targetFactory); } return targetFactory.CreateMultiPolygon(polyList); @@ -243,7 +246,7 @@ public static IMultiPolygon TransformMultiPolygon(IMultiPolygon polys, IMathTran public static IGeometryCollection TransformGeometryCollection(IGeometryCollection geoms, IMathTransform transform, IGeometryFactory targetFactory) { var geomList = new IGeometry[geoms.NumGeometries]; - for(var i = 0; i < geoms.NumGeometries; i++) + for (var i = 0; i < geoms.NumGeometries; i++) { geomList[i] = TransformGeometry(geoms[i], transform, targetFactory); } diff --git a/SharpMap/Data/Providers/GeometryFeatureProvider.cs b/SharpMap/Data/Providers/GeometryFeatureProvider.cs index 9cc26ab2..998b2d96 100644 --- a/SharpMap/Data/Providers/GeometryFeatureProvider.cs +++ b/SharpMap/Data/Providers/GeometryFeatureProvider.cs @@ -233,7 +233,7 @@ private IEnumerable> EnumerateFeatures(Envelo { yield return new KeyValuePair(Convert.ToUInt32(feature[_oid]), feature); } - + } } } @@ -265,11 +265,15 @@ public IGeometry GetGeometryByID(uint oid) lock (_features.Rows.SyncRoot) { if (_oid == -1) - return ((FeatureDataRow)_features.Rows[(int)oid]).Geometry; + { + if (oid >= _features.Rows.Count) + return null; + else + return ((FeatureDataRow)_features.Rows[(int)oid]).Geometry; + } else { - DataRow dr; - dr = _features.Rows.Find(oid); + var dr = _features.Rows.Find(oid); if (dr != null) return ((FeatureDataRow)dr).Geometry; else @@ -472,4 +476,4 @@ public void Dispose() #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/LabelLayer.cs b/SharpMap/Layers/LabelLayer.cs index fe980c51..f962cda9 100644 --- a/SharpMap/Layers/LabelLayer.cs +++ b/SharpMap/Layers/LabelLayer.cs @@ -380,7 +380,11 @@ public override int SRID throw (new ApplicationException("DataSource property not set on layer '" + LayerName + "'")); return DataSource.SRID; } - set { DataSource.SRID = value; } + set + { + DataSource.SRID = value; + base.SRID = value; + } } #region IDisposable Members @@ -1033,4 +1037,4 @@ private static void CalculateLabelAroundOnLineString(ILineString line, ref BaseL } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/Layer.cs b/SharpMap/Layers/Layer.cs index 91ea4f13..844e6a8b 100644 --- a/SharpMap/Layers/Layer.cs +++ b/SharpMap/Layers/Layer.cs @@ -60,11 +60,8 @@ public abstract partial class Layer : DisposableObject, ILayer /// The arguments associated with the event protected virtual void OnSridChanged(EventArgs eventArgs) { - _sourceFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); - if (!_shouldNotResetCt) - _coordinateTransform = _reverseCoordinateTransform = null; var handler = SRIDChanged; - if (handler!= null) handler(this, eventArgs); + if (handler != null) handler(this, eventArgs); } /// @@ -109,15 +106,15 @@ protected virtual void OnLayerNameChanged(EventArgs eventArgs) private IStyle _style; private int _srid = -1; private int? _targetSrid; - [field:NonSerialized] + [field: NonSerialized] private bool _shouldNotResetCt; -// ReSharper disable PublicConstructorInAbstractClass + // ReSharper disable PublicConstructorInAbstractClass /// /// Creates an instance of this class using the given Style /// /// public Layer(Style style) -// ReSharper restore PublicConstructorInAbstractClass + // ReSharper restore PublicConstructorInAbstractClass { _style = style; } @@ -138,7 +135,7 @@ protected override void ReleaseManagedResources() _coordinateTransform = null; _reverseCoordinateTransform = null; _style = null; - + base.ReleaseManagedResources(); } @@ -160,9 +157,47 @@ public virtual ICoordinateTransformation CoordinateTransformation } set { - if (value == _coordinateTransform) + if (value == _coordinateTransform && value != null) return; + _coordinateTransform = value; + + try + { + // we don't want that by setting SRID we get the CoordinateTransformation resetted + _shouldNotResetCt = true; + + if (_coordinateTransform != null) + { + // causes sourceFactory/targetFactory to reset to new SRID/TargetSRID + SRID = Convert.ToInt32(CoordinateTransformation.SourceCS.AuthorityCode); + TargetSRID = Convert.ToInt32(CoordinateTransformation.TargetCS.AuthorityCode); + } + else + { + _sourceFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(SRID); + // causes targetFactory to be cleared + TargetSRID = 0; + } + } + finally + { + _shouldNotResetCt = false; + } + + // check if ReverseTransform is required + if (_coordinateTransform == null || !NeedsTransformation) + _reverseCoordinateTransform = null; + + // check if existing ReverseTransform is compatible with CoordinateTransform + if (_reverseCoordinateTransform != null) + { + //clear if not compatible with CoordinateTransformation + if (_coordinateTransform.SourceCS.AuthorityCode != _coordinateTransform.TargetCS.AuthorityCode || + _coordinateTransform.TargetCS.AuthorityCode != _coordinateTransform.SourceCS.AuthorityCode) + _reverseCoordinateTransform = null; + } + OnCoordinateTransformationChanged(EventArgs.Empty); } } @@ -178,25 +213,6 @@ public virtual ICoordinateTransformation CoordinateTransformation /// The event's arguments protected virtual void OnCoordinateTransformationChanged(EventArgs e) { - _sourceFactory = _targetFactory = GeoAPI.GeometryServiceProvider.Instance - .CreateGeometryFactory(SRID); - - if (CoordinateTransformation != null) - { - // we don't want that by setting SRID we get the CoordinateTransformation resetted - _shouldNotResetCt = true; - try - { - SRID = Convert.ToInt32(CoordinateTransformation.SourceCS.AuthorityCode); - TargetSRID = Convert.ToInt32(CoordinateTransformation.TargetCS.AuthorityCode); - } - finally - { - _shouldNotResetCt = false; - } - - } - if (CoordinateTransformationChanged != null) CoordinateTransformationChanged(this, e); } @@ -228,7 +244,12 @@ public virtual ICoordinateTransformation ReverseCoordinateTransformation } return _reverseCoordinateTransform; } - set { _reverseCoordinateTransform= value; } + set + { + if (value == _reverseCoordinateTransform) + return; + _reverseCoordinateTransform = value; + } } protected bool NeedsTransformation @@ -267,6 +288,11 @@ public virtual int SRID if (value != _srid) { _srid = value; + + _sourceFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(value); + if (!_shouldNotResetCt) + _coordinateTransform = _reverseCoordinateTransform = null; + OnSridChanged(EventArgs.Empty); } } @@ -280,8 +306,18 @@ public virtual int TargetSRID get { return _targetSrid.HasValue ? _targetSrid.Value : SRID; } set { - _targetSrid = value; - _targetFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(value); + if (value == SRID || value == 0) + { + _targetSrid = null; + _targetFactory = null; + } + else if (_targetSrid != value) + { + _targetSrid = value; + _targetFactory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(value); + } + if (!_shouldNotResetCt) + _coordinateTransform = _reverseCoordinateTransform = null; } } @@ -373,7 +409,8 @@ public double MaxVisible /// /// Gets or Sets what kind of units the Min/Max visible properties are defined in /// - public VisibilityUnits VisibilityUnits { + public VisibilityUnits VisibilityUnits + { get { return _style.VisibilityUnits; @@ -516,4 +553,4 @@ protected virtual IGeometry ToSource(IGeometry geometry) #endregion } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/LayerGroup.cs b/SharpMap/Layers/LayerGroup.cs index a0652418..e5a24ce3 100644 --- a/SharpMap/Layers/LayerGroup.cs +++ b/SharpMap/Layers/LayerGroup.cs @@ -184,6 +184,48 @@ public override ICoordinateTransformation ReverseCoordinateTransformation } } + /// + /// The spatial reference ID (CRS) + /// Propogation to child layers is dependent on + /// Changes to SRID with propogation enabled will cause both and to be reset + /// + public override int SRID + { + get { return base.SRID; } + set + { + base.SRID = value; + if (!SkipTransformationPropagation) + { + var layers = GetSnapshot(); + + foreach (var layer in layers.OfType()) + layer.SRID = value; + } + } + } + + /// + /// The target spatial reference id + /// Propogation to child layers is dependent on + /// Changes to TargetSRID with propogation enabled will cause both and to be reset + /// + public override int TargetSRID + { + get { return base.TargetSRID; } + set + { + base.TargetSRID = value; + if (!SkipTransformationPropagation) + { + var layers = GetSnapshot(); + + foreach (var layer in layers.OfType()) + layer.TargetSRID = value; + } + } + } + #region IDisposable Members /// @@ -285,17 +327,23 @@ public virtual object Clone() { var clonedGroup = CreateUninitializedInstance(); - clonedGroup.CoordinateTransformation = CoordinateTransformation; clonedGroup.Enabled = Enabled; clonedGroup.IsQueryEnabled = IsQueryEnabled; clonedGroup.MaxVisible = MaxVisible; clonedGroup.VisibilityUnits = VisibilityUnits; clonedGroup.MinVisible = MinVisible; clonedGroup.Proj4Projection = Proj4Projection; - clonedGroup.SRID = SRID; - clonedGroup.ReverseCoordinateTransformation = ReverseCoordinateTransformation; clonedGroup.Style = Style; + // setting SRIDs resets Transformations + clonedGroup.SRID = SRID; clonedGroup.TargetSRID = TargetSRID; + // do NOT set NULL CoordinateTransformation, as this will cause SRID, SourceFactory, TargetSRID, and TargetFactory to be reset + if (CoordinateTransformation != null) + { + // restore defined CoordinateTransformation and associated ReverseCoordinateTransformation (causes SRID / TargetSRID to reset appropriately) + clonedGroup.CoordinateTransformation = CoordinateTransformation; + clonedGroup.ReverseCoordinateTransformation = ReverseCoordinateTransformation; + } var layers = GetSnapshot(); foreach (var layer in layers) @@ -326,4 +374,4 @@ System.Collections.Generic.IList ILayersContainer.Layers get { return Layers; } } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/VectorLayer.cs b/SharpMap/Layers/VectorLayer.cs index 300e16cd..e0c71c1e 100644 --- a/SharpMap/Layers/VectorLayer.cs +++ b/SharpMap/Layers/VectorLayer.cs @@ -186,7 +186,11 @@ public override int SRID return DataSource.SRID; } - set { DataSource.SRID = value; } + set + { + DataSource.SRID = value; + base.SRID = value; + } } #region IDisposable Members diff --git a/UnitTests/Layers/CoordinateTransformationTest.cs b/UnitTests/Layers/CoordinateTransformationTest.cs new file mode 100644 index 00000000..1291b73f --- /dev/null +++ b/UnitTests/Layers/CoordinateTransformationTest.cs @@ -0,0 +1,307 @@ +using GeoAPI.Geometries; +using NetTopologySuite.Geometries; +using NUnit.Framework; +using SharpMap; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; + +namespace UnitTests.Layers +{ + class CoordinateTransformationTest + { + + private string _path = "C:\\temp\\"; + private string _baseFileName = "CoordTransTest"; + private double _gcsTolerance = 0.00000002; // 2mm (8dp dec degree = approx 1mm) + private double _pcsTolerance = 0.002; // 2mm + + [Test] + public void CoordinateTransformation_ChangingTargetSrid_PR101() + { + var m = InitialiseMapAndLayers(); + + // force calc/cache of extents + m.ZoomToExtents(); + + TestNoCoordTrans(m); + + // visual proof - zoom to extents of Wgs84 and Ind75. Diagonal cross will not intersect North-South line (ie incorrect datum trans) + var box = m.Layers[0].Envelope; + box.ExpandToInclude(m.Layers[1].Envelope); + m.ZoomToBox(box); + + using (var img = m.GetMap()) + img.Save(System.IO.Path.Combine(_path, _baseFileName + "NoTargetSrid.bmp")); + + // Test setting TargetSRID (should cause CoordinateTransformation to be updated) and generate maps with symmetrical 8-pointed star + TestSrid(m, 4326, _gcsTolerance); + TestSrid(m, 4240, _gcsTolerance); + TestSrid(m, 24047, _pcsTolerance); + TestSrid(m, 3857, _pcsTolerance); + } + + [Test] + public void CoordinateTransformation_ChangingCoordTrans_PR101() + { + var m = InitialiseMapAndLayers(); + + // force calc/cache of extents + m.ZoomToExtents(); + + TestNoCoordTrans(m); + + // Test setting CoordinateTransformations (should cause TargetSRID to be updated) and generate maps with symmetrical 8-pointed star + TestTrans(m, 4326, _gcsTolerance); + TestTrans(m, 4240, _gcsTolerance); + TestTrans(m, 24047, _pcsTolerance); + TestTrans(m, 3857, _pcsTolerance); + } + + private Map InitialiseMapAndLayers() + { + // plug in Web Mercator + var pcs = ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator; + SharpMap.Session.Instance.CoordinateSystemRepository.AddCoordinateSystem(3857, pcs); + + Map m = new SharpMap.Map(new System.Drawing.Size(1440, 1080)) { BackColor = System.Drawing.Color.LightSkyBlue }; + m.SRID = 3857; + + // add 3 layers: WGS84 with 2 diagonal lines, Ind75 with North-South line, and Ind75Utm47N with East-West Line + // Mid-point of all lines is the same point (to within a few mm), creating a symetrical 8-pointed star when correctly transformed. + // Datum Shift from Wgs84 to Ind75 in study area is in vicinity of 350-400m, so any GCS mis-match is immediately apparent. + var vlWgs84 = CreateLayerWgs84(); + var envWgs84 = vlWgs84.DataSource.GetExtents(); + + var vlInd75 = CreateLayerInd75(); + var envInd75 = vlInd75.DataSource.GetExtents(); + + var vlInd75Utm47N = CreateLayerInd75Utm47N(); + var envInd75Utm47N = vlInd75Utm47N.DataSource.GetExtents(); + + m.Layers.Add(vlWgs84); + m.Layers.Add(vlInd75); + m.Layers.Add(vlInd75Utm47N); + + return m; + } + + private void TestNoCoordTrans(Map m) + { + for (int i = 0; i < m.Layers.Count(); i++) + { + var vl = (VectorLayer)m.Layers[i]; + Assert.IsNull(vl.CoordinateTransformation); + Assert.IsNull(vl.ReverseCoordinateTransformation); + } + } + + private void TestSrid(Map m, int targetSrid, double tolerance) + { + // set Map SRID and TartgetSRID + SetTargetSridAndZoomExtents(m, targetSrid); + // check CoordTrans Source/Target Ids make sense + ValidateCoordTransDef(m); + // centroids of Map Extents and all layers envelopes should be the same + ValidateCentroids(m, tolerance); + // and appropriate env dimensions should also compare... need to increase tolerances here, remembering looking for gross errors only + if (targetSrid == 24047 || targetSrid == 3857) + // projected coord systems - allow for distortions + ValidateEnvSizes(m, 2); // 2 metres + else + ValidateEnvSizes(m, tolerance * 5); + + // visual check: symmetrical 8-pointed star + using (var img = m.GetMap()) + img.Save(System.IO.Path.Combine(_path, _baseFileName + "_SRID_" + targetSrid + ".bmp")); + } + + private void TestTrans(Map m, int targetSrid, double tolerance) + { + // set Map SRID and TartgetSRID + SetCoordTransAndZoomExtents(m, targetSrid); + // check CoordTrans Source/Target Ids make sense + ValidateCoordTransDef(m); + // centroids of Map Extents and all layers envelopes should be the same + ValidateCentroids(m, tolerance); + // and appropriate env dimensions should also compare... need to increase tolerances here, remembering looking for gross errors only + if (targetSrid == 24047 || targetSrid == 3857) + // projected coord systems - allow for distortions + ValidateEnvSizes(m, 2); // 2 metres + else + ValidateEnvSizes(m, tolerance * 5); + + // visual check: symmetrical 8-pointed star + using (var img = m.GetMap()) + img.Save(System.IO.Path.Combine(_path, _baseFileName + "_Trans_" + targetSrid + ".bmp")); + } + + private void SetTargetSridAndZoomExtents(Map m, int targetSrid) + { + m.SRID = targetSrid; + for (int i = 0; i < m.Layers.Count(); i++) + { + var srid = ((VectorLayer)m.Layers[i]).SRID; + ((VectorLayer)m.Layers[i]).SRID = srid; + ((VectorLayer)m.Layers[i]).TargetSRID = targetSrid; + } + + m.ZoomToExtents(); + } + + private void SetCoordTransAndZoomExtents(Map m, int targetSrid) + { + m.SRID = targetSrid; + + var css = Session.Instance.CoordinateSystemServices; + var ctf = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(); + + for (int i = 0; i < m.Layers.Count(); i++) + { + var vl = (VectorLayer)m.Layers[i]; + if (vl.SRID == targetSrid) + vl.CoordinateTransformation = null; + else + vl.CoordinateTransformation = ctf.CreateFromCoordinateSystems( + css.GetCoordinateSystem(vl.SRID), + css.GetCoordinateSystem(targetSrid)); + } + + m.ZoomToExtents(); + } + private void ValidateCoordTransDef(Map m) + { + for (int i = 0; i < m.Layers.Count(); i++) + { + var vl = (VectorLayer)m.Layers[i]; + if (m.SRID == vl.SRID) + { + Assert.AreEqual(m.SRID, vl.SRID); + Assert.AreEqual(vl.SRID, vl.TargetSRID); + Assert.IsNull(vl.CoordinateTransformation); + Assert.IsNull(vl.ReverseCoordinateTransformation); + } + else + { + Assert.AreEqual(m.SRID, vl.TargetSRID); + Assert.IsNotNull(vl.CoordinateTransformation); + Assert.AreEqual(vl.SRID, vl.CoordinateTransformation.SourceCS.AuthorityCode); + Assert.AreEqual(vl.TargetSRID, vl.CoordinateTransformation.TargetCS.AuthorityCode); + } + } + } + + private void ValidateCentroids(Map m, double tolerance) + { + var envMap = m.GetExtents(); + for (int i = 0; i < m.Layers.Count(); i++) + { + var vl = (VectorLayer)m.Layers[i]; + Assert.True(envMap.Centre.Equals2D(vl.Envelope.Centre, tolerance)); + } + } + private void ValidateEnvSizes(Map m, double tolerance) + { + var envMap = m.GetExtents(); + for (int i = 0; i < m.Layers.Count(); i++) + { + var vl = (VectorLayer)m.Layers[i]; + switch (vl.LayerName) + { + case "Wgs84": + // map env Width and Height = lyr env Width and Height + Assert.AreEqual(envMap.Width, vl.Envelope.Width, tolerance); + Assert.AreEqual(envMap.Height, vl.Envelope.Height, tolerance); + break; + + case "Ind75": + // map env Height = lyr env Height + Assert.AreEqual(envMap.Height, vl.Envelope.Height, tolerance); + break; + + case "Ind75Utm47N": + // map env Width = lyr env Width + Assert.AreEqual(envMap.Width, vl.Envelope.Width, tolerance); + break; + } + } + } + + private VectorLayer CreateLayerWgs84() + { + GeometryFeatureProvider gfp = new GeometryFeatureProvider(CreateFeatureDataTable()); + gfp.SRID = 4326; + + FeatureDataRow fdr = gfp.Features.NewRow(); + var coordsDiag1 = new[] { new Coordinate(100.498, 7.498), new Coordinate(100.502, 7.502) }; + fdr.Geometry = new LineString(coordsDiag1); + gfp.Features.AddRow(fdr); + + fdr = gfp.Features.NewRow(); + var coordsDiag2 = new[] { new Coordinate(100.498, 7.502), new Coordinate(100.502, 7.498) }; + fdr.Geometry = new LineString(coordsDiag2); + gfp.Features.AddRow(fdr); + + gfp.Features.AcceptChanges(); + + VectorLayer vl = new VectorLayer("Wgs84"); + vl.DataSource = gfp; + return vl; + + } + + private VectorLayer CreateLayerInd75() + { + GeometryFeatureProvider gfp = new GeometryFeatureProvider(CreateFeatureDataTable()); + gfp.SRID = 4240; + + FeatureDataRow fdr = gfp.Features.NewRow(); + var coordsNS = new[] { new Coordinate(100.503215154, 7.49987995484), new Coordinate(100.503215125, 7.4958796771) }; + fdr.Geometry = new LineString(coordsNS); + gfp.Features.AddRow(fdr); + + gfp.Features.AcceptChanges(); + + VectorLayer vl = new VectorLayer("Ind75"); + vl.DataSource = gfp; + return vl; + } + + private VectorLayer CreateLayerInd75Utm47N() + { + GeometryFeatureProvider gfp = new GeometryFeatureProvider(CreateFeatureDataTable()); + gfp.SRID = 24047; + + FeatureDataRow fdr = gfp.Features.NewRow(); + var coordsWE = new[] { new Coordinate(665624.762, 829006.460), new Coordinate(666066.223, 829007.968) }; + fdr.Geometry = new LineString(coordsWE); + gfp.Features.AddRow(fdr); + + gfp.Features.AcceptChanges(); + + VectorLayer vl = new VectorLayer("Ind75Utm47N"); + vl.DataSource = gfp; + return vl; + } + + private FeatureDataTable CreateFeatureDataTable() + { + FeatureDataTable fdt = new FeatureDataTable(); + + fdt.Columns.Add("Oid", typeof(uint)); + UniqueConstraint con = new UniqueConstraint(fdt.Columns[0]); + con.Columns[0].AutoIncrement = true; + fdt.Constraints.Add(con); + fdt.PrimaryKey = new DataColumn[1] { fdt.Columns[0] }; + + return fdt; + + } + + } +} diff --git a/UnitTests/Layers/LayerGroupTest.cs b/UnitTests/Layers/LayerGroupTest.cs index 7b255f4c..03ba2e83 100644 --- a/UnitTests/Layers/LayerGroupTest.cs +++ b/UnitTests/Layers/LayerGroupTest.cs @@ -37,6 +37,14 @@ private GeoAPI.CoordinateSystems.Transformations.ICoordinateTransformation Creat ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84); } + private GeoAPI.CoordinateSystems.Transformations.ICoordinateTransformation CreateReverseTransformation() + { + var ctf = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(); + return ctf.CreateFromCoordinateSystems( + ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, + ProjNet.CoordinateSystems.GeocentricCoordinateSystem.WGS84); + } + [Test(Description = "Setting a CoordinateTransformation to LayerGroup propagates to inner layers")] public void CoordinateTransformation_SettingValue_PropagatesTransformation() { @@ -123,23 +131,29 @@ public void Envelope_SomeInnerLayerWithNullEnvelope_SkipNulls() } [Test(Description = "Clone clones all the properties")] - public void Clone_ClonesTheProperties() + public void LayerGroup_CloneProp() { var group = new LayerGroup("group"); + // This is a transformation that cannot be "inverted" in ProjNet + // Directly setting CoordinateTransformation will update SRID and TargetSRID group.CoordinateTransformation = CreateTransformation(); + group.ReverseCoordinateTransformation = CreateReverseTransformation(); group.Enabled = true; group.IsQueryEnabled = true; group.MinVisible = 10; group.MaxVisible = 100; - group.SRID = 4326; + //group.SRID = 4326; // different to CoordinateTransformation above!!! + //group.TargetSRID = 4318; // different to CoordinateTransformation above!!! group.Proj4Projection = "dummy"; - group.TargetSRID = 4318; group.Style = new LabelStyle(); - + var clonedGroup = (LayerGroup)group.Clone(); - Assert.That(clonedGroup.CoordinateTransformation, Is.EqualTo(group.CoordinateTransformation), "CoordinateTransformation mismatch"); + Assert.That(clonedGroup.CoordinateTransformation.SourceCS.WKT, Is.EqualTo(group.CoordinateTransformation.SourceCS.WKT), "CoordinateTransformation mismatch"); + Assert.That(clonedGroup.CoordinateTransformation.TargetCS.WKT, Is.EqualTo(group.CoordinateTransformation.TargetCS.WKT), "CoordinateTransformation mismatch"); + Assert.That(clonedGroup.ReverseCoordinateTransformation.SourceCS.WKT, Is.EqualTo(group.ReverseCoordinateTransformation.SourceCS.WKT), "CoordinateTransformation mismatch"); + Assert.That(clonedGroup.ReverseCoordinateTransformation.TargetCS.WKT, Is.EqualTo(group.ReverseCoordinateTransformation.TargetCS.WKT), "CoordinateTransformation mismatch"); Assert.That(clonedGroup.Enabled, Is.EqualTo(group.Enabled), "Enabled mismatch"); Assert.That(clonedGroup.IsQueryEnabled, Is.EqualTo(group.IsQueryEnabled), "IsQueryEnabled mismatch"); Assert.That(clonedGroup.MinVisible, Is.EqualTo(group.MinVisible), "MinVisible mismatch"); diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index e698f659..e897a3da 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -169,6 +169,7 @@ + From 8dbc2a69f90f458aa535958568db5fb74a5d3c0f Mon Sep 17 00:00:00 2001 From: terribletim Date: Tue, 4 Sep 2018 12:50:49 +0700 Subject: [PATCH 055/186] Update LayerCollectionRenderer to use MapViewport / Fix issues with Map.MapTransform (#105) * update LayerCollectionRenderer to use MapViewport (instead of Map); fix issues related to locking on Map.MapTransform * add property MapTransformRotation --- .../ImageGenerator/LayerListImageGenerator.cs | 23 +-- SharpMap/Map/Map.cs | 195 +++++++++++------- SharpMap/Map/MapViewport.cs | 63 ++++-- SharpMap/Rendering/LayerCollectionRenderer.cs | 49 +++-- 4 files changed, 198 insertions(+), 132 deletions(-) diff --git a/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs index ca5ba3fb..551e34e9 100644 --- a/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs +++ b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs @@ -138,17 +138,13 @@ private void HandleVariableLayersRequery(object sender, EventArgs e) // map.DisposeLayersOnDispose = false; - var t1 = map.MapTransform.Clone(); - var t2 = map.MapTransform.Clone(); - t2.Invert(); - - var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), - map.Size, map.PixelAspectRatio, t1, t2); - foreach (var lyr in Map.VariableLayers) - { - //new Task(RenderLayerImage, new object[] {lyr, mvp, _cts.Token }).Start(); - ThreadPool.QueueUserWorkItem(delegate { RenderLayerImage(new object[] { lyr, mvp, _cts.Token }); }); - } + var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), + map.Size, map.PixelAspectRatio, map.MapTransform); + foreach (var lyr in Map.VariableLayers) + { + //new Task(RenderLayerImage, new object[] {lyr, mvp, _cts.Token }).Start(); + ThreadPool.QueueUserWorkItem(delegate { RenderLayerImage(new object[] { lyr, mvp, _cts.Token }); }); + } //} } @@ -304,12 +300,9 @@ public void Generate() //using (var map = MapBox.Map) //{ // map.DisposeLayersOnDispose = false; - var t1 = map.MapTransform.Clone(); - var t2 = map.MapTransform.Clone(); - t2.Invert(); var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), - map.Size, map.PixelAspectRatio, t1, t2); + map.Size, map.PixelAspectRatio, map.MapTransform); //var tasks = new List(); var tf = new TaskFactory(); diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index de565e21..2bbbda76 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -87,7 +87,7 @@ static Map() throw new InvalidOperationException(); } } - + // The following code did not seem to work in all cases. /* if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime) @@ -146,9 +146,10 @@ static Map() private readonly LayerCollection _layers; private readonly LayerCollection _backgroundLayers; private readonly VariableLayerCollection _variableLayers; + private object _lockMapTransform = new object(); private Matrix _mapTransform; - internal Matrix MapTransformInverted; - + private Matrix _mapTransformInverted; + private readonly MapViewPortGuard _mapViewportGuard; private readonly Dictionary> _layersPerGroup = new Dictionary>(); private ObservableCollection _replacingCollection; @@ -193,7 +194,7 @@ public Map(Size size) _layersPerGroup.Add(_variableLayers, new List()); BackColor = Color.Transparent; _mapTransform = new Matrix(); - MapTransformInverted = new Matrix(); + _mapTransformInverted = new Matrix(); _center = new Point(0, 0); _zoom = 1; @@ -230,12 +231,12 @@ private void OnLayersCollectionChanged(object sender, NotifyCollectionChangedEve { IterWireEvents(sender, e.NewItems.Cast()); } - + } private void IterWireEvents(object owner, IEnumerable layers) { - foreach(var layer in layers) + foreach (var layer in layers) { _layersPerGroup[owner].Add(layer); @@ -303,7 +304,7 @@ private void IterUnHookEvents(object owner, IEnumerable layers) var clonedList = _layersPerGroup[owner]; toBeRemoved.ForEach(layer => clonedList.Remove(layer)); } - + private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) { var layerGroup = (LayerGroup)sender; @@ -326,7 +327,7 @@ private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) private void OnLayerGroupCollectionReplaching(object sender, EventArgs eventArgs) { - var layerGroup = (LayerGroup) sender; + var layerGroup = (LayerGroup)sender; _replacingCollection = layerGroup.Layers; } @@ -542,28 +543,28 @@ public Metafile GetMapAsMetafile(string metafileName) var bm = new Bitmap(1, 1); using (var g = Graphics.FromImage(bm)) { - var hdc = g.GetHdc(); - using (var stream = new MemoryStream()) - { - metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), - MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); - - using (var metafileGraphics = Graphics.FromImage(metafile)) - { - metafileGraphics.PageUnit = GraphicsUnit.Pixel; - metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, - new[] {new PointF(Size.Width, Size.Height)}); - - //Render map to metafile - RenderMap(metafileGraphics); - } - - //Save metafile if desired - if (!String.IsNullOrEmpty(metafileName)) - File.WriteAllBytes(metafileName, stream.ToArray()); - } + var hdc = g.GetHdc(); + using (var stream = new MemoryStream()) + { + metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), + MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); + + using (var metafileGraphics = Graphics.FromImage(metafile)) + { + metafileGraphics.PageUnit = GraphicsUnit.Pixel; + metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, + new[] { new PointF(Size.Width, Size.Height) }); + + //Render map to metafile + RenderMap(metafileGraphics); + } + + //Save metafile if desired + if (!String.IsNullOrEmpty(metafileName)) + File.WriteAllBytes(metafileName, stream.ToArray()); + } g.ReleaseHdc(hdc); - } + } return metafile; } @@ -580,7 +581,7 @@ public void MapNewTileAvaliableHandler(ITileAsyncLayer sender, Envelope bbox, Bi { var e = MapNewTileAvaliable; if (e != null) - e(sender, bbox, bm,sourceWidth,sourceHeight,imageAttributes); + e(sender, bbox, bm, sourceWidth, sourceHeight, imageAttributes); } /// @@ -602,14 +603,17 @@ public void RenderMap(Graphics g) if ((Layers == null || Layers.Count == 0) && (BackgroundLayer == null || BackgroundLayer.Count == 0) && (_variableLayers == null || _variableLayers.Count == 0)) throw new InvalidOperationException("No layers to render"); - lock (MapTransform) + MapViewport mvp = null; + lock (_lockMapTransform) { - g.Transform = MapTransform.Clone(); + // working with MapTransform CLONE + g.Transform = MapTransform; + mvp = (MapViewport)this; } g.Clear(BackColor); g.PageUnit = GraphicsUnit.Pixel; - double zoom = Zoom; + double zoom = mvp.Zoom; double scale = double.NaN; //will be resolved if needed ILayer[] layerList; @@ -621,7 +625,7 @@ public void RenderMap(Graphics g) { if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) { - scale = MapScale; + scale = mvp.GetMapScale((int)g.DpiX); } double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; @@ -630,7 +634,7 @@ public void RenderMap(Graphics g) { if (layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) { - LayerCollectionRenderer.RenderLayer(layer, g, this); + LayerCollectionRenderer.RenderLayer(layer, g, mvp); } } OnLayerRendered(layer, LayerCollectionType.Background); @@ -647,13 +651,13 @@ public void RenderMap(Graphics g) { if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) { - scale = MapScale; + scale = mvp.GetMapScale((int)g.DpiX); } double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; OnLayerRendering(layer, LayerCollectionType.Static); if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) - LayerCollectionRenderer.RenderLayer(layer, g, this); - + LayerCollectionRenderer.RenderLayer(layer, g, mvp); + OnLayerRendered(layer, LayerCollectionType.Static); } } @@ -666,12 +670,12 @@ public void RenderMap(Graphics g) { if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) { - scale = MapScale; + scale = mvp.GetMapScale((int)g.DpiX); } double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) - LayerCollectionRenderer.RenderLayer(layer, g, this); - + LayerCollectionRenderer.RenderLayer(layer, g, mvp); + } } @@ -799,13 +803,16 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool break; } - if (lc== null || lc.Count == 0) + if (lc == null || lc.Count == 0) throw new InvalidOperationException("No layers to render"); Matrix transform = g.Transform; - lock (MapTransform) + MapViewport mvp = null; + lock (_lockMapTransform) { - g.Transform = MapTransform.Clone(); + // working with MapTransform CLONE + g.Transform = MapTransform; + mvp = (MapViewport)this; } if (!drawTransparent) g.Clear(BackColor); @@ -815,7 +822,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool //LayerCollectionRenderer.AllowParallel = layerCollectionType == LayerCollectionType.Static; using (var lcr = new LayerCollectionRenderer(lc)) { - lcr.Render(g, this, layerCollectionType == LayerCollectionType.Static); + lcr.Render(g, mvp, layerCollectionType == LayerCollectionType.Static); } /* @@ -831,9 +838,8 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool */ if (drawTransparent) - + g.Transform = transform; - g.Transform = transform; if (layerCollectionType == LayerCollectionType.Static) { #pragma warning disable 612,618 @@ -863,7 +869,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool public Map Clone() { Map clone; - lock (MapTransform) + lock (_lockMapTransform) { clone = new Map { @@ -888,7 +894,7 @@ public Map Clone() clone.DisclaimerFont = (Font)DisclaimerFont.Clone(); #pragma warning restore 612,618 if (MapTransform != null) - clone.MapTransform = MapTransform.Clone(); + clone.MapTransform = MapTransform; if (!Size.IsEmpty) clone.Size = new Size(Size.Width, Size.Height); if (Center != null) @@ -964,7 +970,7 @@ public IEnumerable FindLayer(string layername) /// Layer public ILayer GetLayerByName(string name) { - ILayer lay = null; + ILayer lay = null; if (Layers != null) { lay = Layers.GetLayerByName(name); @@ -1042,15 +1048,21 @@ public void ZoomToBox(Envelope bbox) public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) { var pTmp = Transform.WorldtoMap(p, this); - lock (MapTransform) - { - if (careAboutMapTransform && !MapTransform.IsIdentity) + if (!careAboutMapTransform) + return pTmp; + + // working with MapTransform clone + if ( MapTransformRotation != 0) + using (var transform = MapTransform) { - var pts = new[] { pTmp }; - MapTransform.TransformPoints(pts); - pTmp = pts[0]; + if (!transform.IsIdentity ) + { + var pts = new[] { pTmp }; + transform.TransformPoints(pts); + pTmp = pts[0]; + } } - } + return pTmp; } @@ -1084,15 +1096,21 @@ public Point ImageToWorld(PointF p) /// Point in world coordinates public Point ImageToWorld(PointF p, bool careAboutMapTransform) { - lock (MapTransform) + if (careAboutMapTransform && MapTransformRotation != 0) { - if (careAboutMapTransform && !MapTransform.IsIdentity) + Matrix transformInv; + lock (_lockMapTransform) + transformInv = _mapTransformInverted.Clone(); + + if (!transformInv.IsIdentity) { var pts = new[] { p }; - MapTransformInverted.TransformPoints(pts); + transformInv.TransformPoints(pts); p = pts[0]; } + transformInv.Dispose(); } + return Transform.MapToWorld(p, this); } @@ -1149,7 +1167,7 @@ public Envelope Envelope var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); - + var ptfll = WorldToImage(ll, true); ptfll = new PointF(Math.Abs(ptfll.X), Math.Abs(Size.Height - ptfll.Y)); if (!ptfll.IsEmpty) @@ -1159,12 +1177,12 @@ public Envelope Envelope ur.X = ur.X + ptfll.X * PixelWidth; ur.Y = ur.Y + ptfll.Y * PixelHeight; } - return new Envelope(ll, ur); + return new Envelope(ll, ur); } } /// - /// Using the you can alter the coordinate system of the map rendering. + /// Getter returns a CLONE. Using the you can alter the coordinate system of the map rendering. /// This makes it possible to rotate or rescale the image, for instance to have another direction than north upwards. /// /// @@ -1177,20 +1195,38 @@ public Envelope Envelope /// public Matrix MapTransform { - get { return _mapTransform; } + get + { + lock (_lockMapTransform) + return _mapTransform.Clone(); + } set { - _mapTransform = value; - if (_mapTransform.IsInvertible) + lock (_lockMapTransform) { - MapTransformInverted = value.Clone(); - MapTransformInverted.Invert(); + _mapTransform = value; + if (_mapTransform.IsInvertible) + { + _mapTransformInverted = value.Clone(); + _mapTransformInverted.Invert(); + } + else + _mapTransformInverted.Reset(); + + if (_mapTransform.IsIdentity) + MapTransformRotation = 0; + else + MapTransformRotation = Convert.ToSingle(Math.Acos(_mapTransform.Elements[0]) * 180.0 / Math.PI); + } - else - MapTransformInverted.Reset(); } } + /// + /// MapTransform Rotation in degrees. Facilitates determining if map is rotated without locking MapTransform. + /// + public float MapTransformRotation { get; private set; } + /// /// A collection of layers. The first layer in the list is drawn first, the last one on top. /// @@ -1257,7 +1293,7 @@ public Point Center _center = newCenter; changed = true; } - + if (changed && MapViewOnChange != null) MapViewOnChange(); } @@ -1276,7 +1312,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int) g.DpiX; + _dpiX = (int)g.DpiX; } } @@ -1288,7 +1324,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int) g.DpiX; + _dpiX = (int)g.DpiX; } } Zoom = GetMapZoomFromScale(value, _dpiX.Value); @@ -1349,7 +1385,7 @@ public double Zoom /// public double PixelSize { - get { return Zoom/Size.Width; } + get { return Zoom / Size.Width; } } /// @@ -1390,7 +1426,7 @@ public double PixelAspectRatio /// public double MapHeight { - get { return (Zoom*Size.Height)/Size.Width*PixelAspectRatio; } + get { return (Zoom * Size.Height) / Size.Width * PixelAspectRatio; } } /// @@ -1471,7 +1507,7 @@ private static void ExtendBoxForCollection(IEnumerable layersCollection, { foreach (var l in layersCollection) { - + //Tries to get bb. Fails on some specific shapes and Mercator projects (World.shp) Envelope bb; try @@ -1507,7 +1543,8 @@ private static void ExtendBoxForCollection(IEnumerable layersCollection, public String Disclaimer { get { return _disclaimer; } - set { + set + { //only set disclaimer if not already done if (String.IsNullOrEmpty(_disclaimer)) { @@ -1517,7 +1554,7 @@ public String Disclaimer _disclaimerFont = new Font(FontFamily.GenericSansSerif, 8f); } } - } + } private Font _disclaimerFont; /// @@ -1546,7 +1583,7 @@ public Font DisclaimerFont public Int32 DisclaimerLocation { get { return _disclaimerLocation; } - set { _disclaimerLocation = value%4; } + set { _disclaimerLocation = value % 4; } } diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index ef9c9aa6..1440f1f4 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -17,6 +17,9 @@ public class MapViewport private readonly Matrix _mapTransformInverted; private double _left; private double _top; + private int _lastDpi; + private double _mapScale; + private object _lockMapScale = new object(); /// /// Creates an instance of this class @@ -27,7 +30,7 @@ public class MapViewport /// The size of the viewport /// A ratio between width and height /// An affine map transform matrix - public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAspectRatio, Matrix mapTransform, Matrix mapTransformInverted) + public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAspectRatio, Matrix mapTransform) { ID = mapId; SRID = srid; @@ -37,14 +40,21 @@ public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAs Center = env.Centre; PixelAspectRatio = pixelAspectRatio; - PixelWidth = PixelSize = env.Width/size.Width; - PixelHeight = PixelWidth*pixelAspectRatio; + PixelWidth = PixelSize = env.Width / size.Width; + PixelHeight = PixelWidth * pixelAspectRatio; Zoom = env.Width; - MapHeight = Zoom*pixelAspectRatio; + MapHeight = Zoom * pixelAspectRatio; - _mapTransform = mapTransform.Clone(); - _mapTransformInverted = mapTransformInverted.Clone(); + // already cloned + _mapTransform = mapTransform; + if (_mapTransform.IsInvertible) + { + _mapTransformInverted = _mapTransform.Clone(); + _mapTransformInverted.Invert(); + } + else + _mapTransformInverted = new Matrix(); var height = (Zoom * Size.Height) / Size.Width; _left = Center.X - Zoom * 0.5; @@ -73,7 +83,7 @@ public Matrix MapTransform public Coordinate Center { get; private set; } - public double Zoom { get; set; } + public double Zoom { get; private set; } public double MapHeight { get; private set; } public double MapWidth { get { return Zoom; } } @@ -105,7 +115,15 @@ public double PixelAspectRatio public double GetMapScale(int dpi) { - return ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); + lock (_lockMapScale) + { + if (_lastDpi != dpi) + { + _mapScale = ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); + _lastDpi = dpi; + } + return _mapScale; + } } /// @@ -121,15 +139,16 @@ public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) if (!careAboutMapTransform) return pTmp; - lock (_mapTransform) + using (var transform = MapTransform) { - if (!_mapTransform.IsIdentity) + if (!transform.IsIdentity) { var pts = new[] { pTmp }; - _mapTransform.TransformPoints(pts); + transform.TransformPoints(pts); pTmp = pts[0]; } } + return pTmp; } @@ -174,15 +193,17 @@ public Coordinate ImageToWorld(PointF p) /// Point in world coordinates public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) { - lock (_mapTransform) - { - if (careAboutMapTransform && !_mapTransformInverted.IsIdentity) + if (careAboutMapTransform) + using (var transformInv = _mapTransformInverted.Clone()) { - var pts = new[] { p }; - _mapTransformInverted.TransformPoints(pts); - p = pts[0]; + if (!transformInv.IsIdentity) + { + var pts = new[] { p }; + transformInv.TransformPoints(pts); + p = pts[0]; + } } - } + return Transform.MapToWorld(p, this); } /// @@ -192,9 +213,9 @@ public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) /// public static implicit operator MapViewport(Map map) { - return new MapViewport(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, - map.MapTransform, map.MapTransformInverted); + return new MapViewport(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, + map.MapTransform); } } -} \ No newline at end of file +} diff --git a/SharpMap/Rendering/LayerCollectionRenderer.cs b/SharpMap/Rendering/LayerCollectionRenderer.cs index 74d2e88b..2657bf22 100644 --- a/SharpMap/Rendering/LayerCollectionRenderer.cs +++ b/SharpMap/Rendering/LayerCollectionRenderer.cs @@ -19,12 +19,13 @@ public class LayerCollectionRenderer : IDisposable private static readonly ILog Logger = LogManager.GetLogger(); private readonly ILayer[] _layers; - private Map _map; + private MapViewport _mapViewPort; + private double _mapScale; private Image[] _images; private static Func _parallelHeuristic; - private Matrix _transform; - + //private Matrix _transform; + /// /// Creates an instance of this class /// @@ -41,13 +42,27 @@ public LayerCollectionRenderer(ICollection layers) /// The graphics object /// The map /// + [Obsolete("Use Render(Graphics, MapViewport, allowParallel)")] [MethodImpl(MethodImplOptions.Synchronized)] public void Render(Graphics g, Map map, bool allowParallel) { - _map = map; - _transform = _map.MapTransform; + Render(g, (MapViewport)map, allowParallel); + } + + /// + /// Method to render the layer collection + /// + /// The graphics object + /// Rendering parameters snapshot of current map + /// + [MethodImpl(MethodImplOptions.Synchronized)] + public void Render(Graphics g, MapViewport mapViewPort, bool allowParallel) + { + _mapViewPort = mapViewPort; + _mapScale = _mapViewPort.GetMapScale((int)g.DpiX); + //_transform = _map.MapTransform; g.PageUnit = GraphicsUnit.Pixel; - if (AllowParallel && allowParallel && ParallelHeuristic(map.Size, g.DpiX, _layers.Length)) + if (AllowParallel && allowParallel && ParallelHeuristic(mapViewPort.Size, g.DpiX, _layers.Length)) { RenderParellel(g); } @@ -90,10 +105,10 @@ private void RenderSequenial(Graphics g) var layer = _layers[layerIndex]; if (layer.Enabled) { - double compare = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? _map.Zoom : _map.MapScale; + double compare = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? _mapViewPort.Zoom : _mapScale; if (layer.MaxVisible >= compare && layer.MinVisible < compare) { - RenderLayer(layer, g, _map); + RenderLayer(layer, g, _mapViewPort); } } } @@ -130,17 +145,17 @@ private void RenderToImage(int layerIndex, ParallelLoopState pls) if (layer.Enabled) { - double compare = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? _map.Zoom : _map.MapScale; + double compare = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? _mapViewPort.Zoom : _mapScale; if (layer.MaxVisible >= compare && layer.MinVisible < compare) { - var image = _images[layerIndex] = new Bitmap(_map.Size.Width, _map.Size.Height, PixelFormat.Format32bppArgb); + var image = _images[layerIndex] = new Bitmap(_mapViewPort.Size.Width, _mapViewPort.Size.Height, PixelFormat.Format32bppArgb); using (var g = Graphics.FromImage(image)) { g.PageUnit = GraphicsUnit.Pixel; - ApplyTransform(_transform, g); + ApplyTransform(_mapViewPort.MapTransform , g); g.Clear(Color.Transparent); - RenderLayer(layer, g, _map); + RenderLayer(layer, g, _mapViewPort ); } } } @@ -151,12 +166,12 @@ private void RenderToImage(int layerIndex, ParallelLoopState pls) /// /// /// - /// - public static void RenderLayer(ILayer layer, Graphics g, Map map) + /// + public static void RenderLayer(ILayer layer, Graphics g, MapViewport mapViewPort) { try { - layer.Render(g, map); + layer.Render(g, mapViewPort); } catch (Exception e) { @@ -164,7 +179,7 @@ public static void RenderLayer(ILayer layer, Graphics g, Map map) using (var pen = new Pen(Color.Red, 4f)) { - var size = map.Size; + var size = mapViewPort.Size; g.DrawLine(pen, 0, 0, size.Width, size.Height); g.DrawLine(pen, size.Width,0, 0, size.Height); @@ -191,4 +206,4 @@ public void Dispose() } } } -} \ No newline at end of file +} From c55969167fb79ee79569505f63aa135116e0036e Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Tue, 11 Sep 2018 10:49:31 +0200 Subject: [PATCH 056/186] Update projects to use NTS v1.15.1 (#111) * Minor adjustments to the code. * Fixed usage of HttpResponse.End() * Code documentation for MapViewport * Prevent assignment of non-invertible MapTransform --- Examples/DemoWebSite/App_Code/MapHelper.cs | 7 +- Examples/DemoWebSite/App_Data/cities.shp.sidx | Bin 34613 -> 34613 bytes .../DemoWebSite/App_Data/countries.shp.sidx | Bin 11637 -> 11637 bytes Examples/DemoWebSite/App_Data/rivers.shp.sidx | Bin 7703 -> 7703 bytes Examples/DemoWebSite/Bin/SpatialRefSys.xml | 19572 ++++++++++++++++ Examples/DemoWebSite/Simple.aspx.cs | 4 +- Examples/DemoWebSite/Web.Config | 11 +- Examples/DemoWebSite/packages.config | 13 +- Examples/DemoWinForm/DemoWinForm.csproj | 23 +- Examples/DemoWinForm/packages.config | 10 +- .../ExampleCodeSnippets.csproj | 38 +- Examples/ExampleCodeSnippets/app.config | 4 +- Examples/ExampleCodeSnippets/packages.config | 15 +- .../ExampleCodeSnipplets.VB.vbproj | 18 +- Examples/ExampleCodeSnipplets.VB/app.config | 4 +- .../ExampleCodeSnipplets.VB/packages.config | 8 +- Examples/GtkFormSamples/Main.cs | 34 +- Examples/GtkFormSamples/TestGtk.csproj | 113 +- Examples/GtkFormSamples/TestGtk.sln | 24 +- Examples/GtkFormSamples/app.config | 7 + Examples/GtkFormSamples/gtk-gui/MainWindow.cs | 14 +- Examples/GtkFormSamples/packages.config | 13 + .../App_Data/nyc/poi.shp.sidx | Bin 0 -> 331 bytes .../App_Data/nyc/poly_landmarks.shp.sidx | Bin 0 -> 4325 bytes .../App_Data/nyc/tiger_roads.shp.sidx | Bin 0 -> 455573 bytes .../Handlers/StdJsonMapHandler.cs | 7 +- .../SharpMap.Demo.Wms.csproj | 29 +- Examples/SharpMap.Demo.Wms/packages.config | 12 +- Examples/WPFSamples/WPFSamples.csproj | 13 +- Examples/WPFSamples/packages.config | 6 +- Examples/WinFormSamples/WinFormSamples.csproj | 47 +- Examples/WinFormSamples/app.config | 4 +- Examples/WinFormSamples/packages.config | 11 +- .../SharpMap.Converters.GeoJSON.csproj | 14 +- SharpMap.Converters.GeoJSON/app.config | 11 + SharpMap.Converters.GeoJSON/packages.config | 6 +- .../SharpMap.Converters.Spatialite.csproj | 8 +- .../packages.config | 4 +- ...arpMap.CoordinateSystems.DotSpatial.csproj | 8 +- .../packages.config | 4 +- .../SharpMap.Data.Providers.FileGdb.csproj | 20 +- .../packages.config | 8 +- .../SharpMap.Data.Providers.GeoPackage.csproj | 18 +- .../packages.config | 8 +- .../SharpMap.Data.Providers.Kml.csproj | 23 +- SharpMap.Data.Providers.Kml/packages.config | 10 +- ...arpMap.Data.Providers.OracleSpatial.csproj | 20 +- .../packages.config | 8 +- .../SharpMap.Extensions.x86.csproj | 18 +- SharpMap.Extensions.x86/app.config | 4 +- SharpMap.Extensions.x86/packages.config | 8 +- .../Data/Providers/NtsProvider.cs | 4 +- .../Data/Providers/OgrProvider.cs | 4 +- .../SharpMap.Extensions.csproj | 56 +- SharpMap.Extensions/app.config | 4 +- SharpMap.Extensions/packages.config | 16 +- .../Layers/TileAsyncLayer.cs | 2 +- SharpMap.Layers.BruTile/Layers/TileLayer.cs | 2 +- .../SharpMap.Layers.BruTile.csproj | 8 +- SharpMap.Layers.BruTile/packages.config | 4 +- .../SharpMap.Layers.HeatLayer.csproj | 18 +- SharpMap.Layers.HeatLayer/packages.config | 8 +- .../SharpMap.Serialization.csproj | 8 +- SharpMap.Serialization/app.config | 4 +- SharpMap.Serialization/packages.config | 4 +- .../SharpMap.SqlServerSpatialObjects.csproj | 18 +- .../packages.config | 8 +- SharpMap.UI.WPF/SharpMap.UI.WPF.csproj | 8 +- SharpMap.UI.WPF/packages.config | 4 +- .../ImageGenerator/LayerListImageGenerator.cs | 6 +- .../Forms/ToolBar/MapQueryToolStrip.cs | 4 +- SharpMap.UI/SharpMap.UI.csproj | 23 +- SharpMap.UI/packages.config | 10 +- ...SharpMap.Utilities.Indexing.SbnTree.csproj | 9 +- .../app.config | 12 - .../packages.config | 4 +- SharpMap.Web/SharpMap.Web.csproj | 13 +- SharpMap.Web/Web/Cache.cs | 4 +- SharpMap.Web/Web/HttpHandler.cs | 10 +- SharpMap.Web/Web/Wms/WmsException.cs | 7 +- SharpMap.Web/Web/Wms/WmsServer.cs | 14 +- SharpMap.Web/packages.config | 6 +- .../WellKnownText/GeometryFromWKT.cs | 6 +- .../Transformations/GeometryTransform.cs | 2 +- .../Data/Providers/IProviderConfiguration.cs | 4 +- SharpMap/Data/Providers/ShapeFile.cs | 12 +- SharpMap/Geometries/GeoAPIEx.cs | 4 +- SharpMap/Layers/AsyncLayerProxyLayer.cs | 3 +- SharpMap/Layers/LabelLayer.cs | 2 +- SharpMap/Layers/TiledWmsLayer.cs | 4 +- SharpMap/Layers/VectorLayer.cs | 2 +- SharpMap/Map/Map.cs | 131 +- SharpMap/Map/MapViewport.cs | 173 +- SharpMap/Rendering/LayerCollectionRenderer.cs | 14 +- SharpMap/SharpMap.csproj | 18 +- .../Utilities/Indexing/SpatialIndexing.cs | 2 +- SharpMap/packages.config | 8 +- SharpMapServer.sln | 23 +- SharpMapServer/App_Data/settings.xml | 27 + SharpMapServer/Global.asax.cs | 18 +- SharpMapServer/SharpMapServer.csproj | 19 +- SharpMapServer/Web.Debug.config | 2 +- SharpMapServer/Web.Release.config | 4 +- SharpMapServer/Web.config | 20 +- SharpMapServer/packages.config | 6 +- UnitTests/Converters/WKT/WktGeometryTests.cs | 4 +- UnitTests/Data/Providers/NtsProviderTests.cs | 6 +- UnitTests/Properties/Settings.Designer.cs | 30 +- UnitTests/Properties/Settings.settings | 12 +- UnitTests/Serialization/SerializationTests.cs | 8 +- UnitTests/TestWmsCapabilityParser.cs | 4 +- UnitTests/UnitTests.csproj | 50 +- UnitTests/app.config | 13 +- UnitTests/packages.config | 13 +- 114 files changed, 20519 insertions(+), 688 deletions(-) create mode 100644 Examples/DemoWebSite/Bin/SpatialRefSys.xml create mode 100644 Examples/GtkFormSamples/app.config create mode 100644 Examples/GtkFormSamples/packages.config create mode 100644 Examples/SharpMap.Demo.Wms/App_Data/nyc/poi.shp.sidx create mode 100644 Examples/SharpMap.Demo.Wms/App_Data/nyc/poly_landmarks.shp.sidx create mode 100644 Examples/SharpMap.Demo.Wms/App_Data/nyc/tiger_roads.shp.sidx create mode 100644 SharpMap.Converters.GeoJSON/app.config create mode 100644 SharpMapServer/App_Data/settings.xml diff --git a/Examples/DemoWebSite/App_Code/MapHelper.cs b/Examples/DemoWebSite/App_Code/MapHelper.cs index 16284912..df79eb0f 100644 --- a/Examples/DemoWebSite/App_Code/MapHelper.cs +++ b/Examples/DemoWebSite/App_Code/MapHelper.cs @@ -561,9 +561,8 @@ public static Map InitializeMapGdal(Size size) } catch (TypeInitializationException ex) { - if (ex.GetType() == typeof(TypeInitializationException)) - throw new Exception( - "Please copy the umanaged dll's into your bin folder from javascript:window.location.href='http://www.codeplex.com/SharpMap/Wiki/View.aspx?title=Extensions';."); + throw new Exception( + "Please copy the umanaged dll's into your bin folder from javascript:window.location.href='http://www.codeplex.com/SharpMap/Wiki/View.aspx?title=Extensions';."); } } map.Layers.Add(g); @@ -572,4 +571,4 @@ public static Map InitializeMapGdal(Size size) HttpContext.Current.Trace.Write("Map initialized"); return map; } -} \ No newline at end of file +} diff --git a/Examples/DemoWebSite/App_Data/cities.shp.sidx b/Examples/DemoWebSite/App_Data/cities.shp.sidx index 47bbb5a32e5c7a0c7ec40bd6daae5983396ef51a..f843f7abc1c3e709f7129650abfb01ccf425f77a 100644 GIT binary patch delta 37 rcmdnm$F#MNNnqAY5cp`%z`)>eW@qw&iH0(hc@;P&h6-$S`Pc>kD;p0| delta 37 ocmdnm$F#MNNq_+iKG*{(hci2q4@@+anar!eF)>tNqszxO0LVEDx&QzG diff --git a/Examples/DemoWebSite/App_Data/countries.shp.sidx b/Examples/DemoWebSite/App_Data/countries.shp.sidx index 3df6b35145f93beacad793b864a8ae9b36cb260a..397fc1d3c60005afd8c1aa377652f29601c8704a 100644 GIT binary patch delta 25 ecmeww^)-rP)=UuiXg^s%PI_{@1m{K_Ph9|`y9%%X delta 25 dcmeww^)-rv0SrFaPZp4qo*Xa1xlzYc7XW0~2N(bV diff --git a/Examples/DemoWebSite/App_Data/rivers.shp.sidx b/Examples/DemoWebSite/App_Data/rivers.shp.sidx index 389eb9afd2835c2c303a3ce29b37597edb939380..1b066a66460d372232f4d6510e81959c2af570a6 100644 GIT binary patch delta 27 gcmbPkGu?)N)=UuiXwSgFknm@6%0vU%jXJMo0j0tVlK=n! delta 27 ecmbPkGu?)t0SrFa1F3{RlT#)d$ZphmEeil&uLt`8 diff --git a/Examples/DemoWebSite/Bin/SpatialRefSys.xml b/Examples/DemoWebSite/Bin/SpatialRefSys.xml new file mode 100644 index 00000000..e651b6ad --- /dev/null +++ b/Examples/DemoWebSite/Bin/SpatialRefSys.xml @@ -0,0 +1,19572 @@ + + + +Generated from PostGIS 2.0 database using the following query: + +select t.xml from +(select '' as "xml", 0 as auth_srid +union select '', 1 as auth_srid +union select E' \n ' || "auth_srid" || E'\n' || ' ' || "proj4text" || E'\n' || trim("srtext") || E'\n ' , "auth_srid" from spatial_ref_sys +union select '', 999999 as auth_srid order by auth_srid) t; + + +12 may '14: The generated output has been patched according to this: https://sharpmap.codeplex.com/discussions/544687 + + + + + 2000 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs +PROJCS["Anguilla 1957 / British West Indies Grid",GEOGCS["Anguilla 1957",DATUM["Anguilla_1957",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6600"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4600"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2001 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs +PROJCS["Antigua 1943 / British West Indies Grid",GEOGCS["Antigua 1943",DATUM["Antigua_1943",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-255,-15,71,0,0,0,0],AUTHORITY["EPSG","6601"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4601"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2001"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2002 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs +PROJCS["Dominica 1945 / British West Indies Grid",GEOGCS["Dominica 1945",DATUM["Dominica_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY["EPSG","6602"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4602"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2002"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2003 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs +PROJCS["Grenada 1953 / British West Indies Grid",GEOGCS["Grenada 1953",DATUM["Grenada_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY["EPSG","6603"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4603"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2003"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2004 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs +PROJCS["Montserrat 1958 / British West Indies Grid",GEOGCS["Montserrat 1958",DATUM["Montserrat_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[174,359,365,0,0,0,0],AUTHORITY["EPSG","6604"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4604"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2004"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2005 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs +PROJCS["St. Kitts 1955 / British West Indies Grid",GEOGCS["St. Kitts 1955",DATUM["St_Kitts_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[9,183,236,0,0,0,0],AUTHORITY["EPSG","6605"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4605"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2005"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2006 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs +PROJCS["St. Lucia 1955 / British West Indies Grid",GEOGCS["St. Lucia 1955",DATUM["St_Lucia_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORITY["EPSG","6606"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4606"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2006"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2007 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs +PROJCS["St. Vincent 45 / British West Indies Grid",GEOGCS["St. Vincent 1945",DATUM["St_Vincent_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[195.671,332.517,274.607,0,0,0,0],AUTHORITY["EPSG","6607"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4607"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2007"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2008 + +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 2",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2008"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2009 + +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 3",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2009"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2010 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 4",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2010"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2011 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 5",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2011"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2012 + +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 6",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2012"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2013 + +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 7",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2013"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2014 + +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 8",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2014"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2015 + +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 9",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2015"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2016 + +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / SCoPQ zone 10",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2016"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2017 + +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 8",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2017"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2018 + +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 9",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2018"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2019 + +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 10",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2019"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2020 + +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 11",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2020"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2021 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 12",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2021"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2022 + +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 13",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2022"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2023 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 14",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2023"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2024 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 15",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2024"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2025 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 16",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2025"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2026 + +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / MTM zone 17",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2026"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2027 + +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / UTM zone 15N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2027"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2028 + +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / UTM zone 16N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2029 + +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / UTM zone 17N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2029"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2030 + +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(76) / UTM zone 18N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2030"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2031 + +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / UTM zone 17N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2032 + +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / UTM zone 18N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2033 + +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / UTM zone 19N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2034 + +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / UTM zone 20N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2034"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2035 + +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / UTM zone 21N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2036 + +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / New Brunswick Stereo (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",2500000],PARAMETER["false_northing",7500000],AUTHORITY["EPSG","2036"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2037 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 19N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2038 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 20N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2039 + +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs +PROJCS["Israel / Israeli TM Grid",GEOGCS["Israel",DATUM["Israel",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-48,55,52,0,0,0,0],AUTHORITY["EPSG","6141"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4141"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31.73439361111111],PARAMETER["central_meridian",35.20451694444445],PARAMETER["scale_factor",1.0000067],PARAMETER["false_easting",219529.584],PARAMETER["false_northing",626907.39],AUTHORITY["EPSG","2039"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2040 + +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs +PROJCS["Locodjo 1965 / UTM zone 30N",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2040"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2041 + +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs +PROJCS["Abidjan 1987 / UTM zone 30N",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2041"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2042 + +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs +PROJCS["Locodjo 1965 / UTM zone 29N",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2042"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2043 + +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs +PROJCS["Abidjan 1987 / UTM zone 29N",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2043"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2044 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs +PROJCS["Hanoi 1972 / Gauss-Kruger zone 18",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2044"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2045 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs +PROJCS["Hanoi 1972 / Gauss-Kruger zone 19",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2045"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2046 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo15",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2046"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2047 + +proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo17",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2047"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2048 + +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo19",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2048"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2049 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo21",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2049"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2050 + +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo23",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2050"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2051 + +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo25",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2051"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2052 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo27",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2052"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2053 + +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo29",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2053"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2054 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo31",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2054"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2055 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Hartebeesthoek94 / Lo33",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2055"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 2056 + +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs +PROJCS["CH1903+ / LV95",GEOGCS["CH1903+",DATUM["CH1903+",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY["EPSG","6150"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4150"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",2600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","2056"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 2057 + +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs +PROJCS["Rassadiran / Nakhl e Taqi",GEOGCS["Rassadiran",DATUM["Rassadiran",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0],AUTHORITY["EPSG","6153"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4153"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",27.51882880555555],PARAMETER["longitude_of_center",52.60353916666667],PARAMETER["azimuth",0.5716611944444444],PARAMETER["rectified_grid_angle",0.5716611944444444],PARAMETER["scale_factor",0.999895934],PARAMETER["false_easting",658377.437],PARAMETER["false_northing",3044969.194],AUTHORITY["EPSG","2057"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2058 + +proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs +PROJCS["ED50(ED77) / UTM zone 38N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2058"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2059 + +proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs +PROJCS["ED50(ED77) / UTM zone 39N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2059"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2060 + +proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs +PROJCS["ED50(ED77) / UTM zone 40N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2060"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2061 + +proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs +PROJCS["ED50(ED77) / UTM zone 41N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2061"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2062 + +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs +PROJCS["Madrid 1870 (Madrid) / Spain",GEOGCS["Madrid 1870 (Madrid)",DATUM["Madrid_1870_Madrid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6903"]],PRIMEM["Madrid",-3.687938888888889,AUTHORITY["EPSG","8905"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4903"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.9988085293],PARAMETER["false_easting",600000],PARAMETER["false_northing",600000],AUTHORITY["EPSG","2062"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2063 + +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs +PROJCS["Dabola 1981 / UTM zone 28N (deprecated)",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2063"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2064 + +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs +PROJCS["Dabola 1981 / UTM zone 29N (deprecated)",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2064"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2065 + +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=-0 +y_0=-0 +ellps=bessel +towgs84=570.8,85.7,462.8,4.998,1.587,5.261,3.56 +pm=ferro +to_meter=-1 +no_defs +PROJCS["S-JTSK (Ferro) / Krovak",GEOGCS["S-JTSK (Ferro)",DATUM["S_JTSK_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6818"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4818"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Krovak"],PARAMETER["latitude_of_center",49.5],PARAMETER["longitude_of_center",42.5],PARAMETER["azimuth",30.28813972222222],PARAMETER["pseudo_standard_parallel_1",78.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2065"],AXIS["X",SOUTH],AXIS["Y",WEST]] + + + 2066 + +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs +PROJCS["Mount Dillon / Tobago Grid",GEOGCS["Mount Dillon",DATUM["Mount_Dillon",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6157"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4157"]],UNIT["Clarke's link",0.201166195164,AUTHORITY["EPSG","9039"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",11.25217861111111],PARAMETER["central_meridian",-60.68600888888889],PARAMETER["false_easting",187500],PARAMETER["false_northing",180000],AUTHORITY["EPSG","2066"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2067 + +proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs +PROJCS["Naparima 1955 / UTM zone 20N",GEOGCS["Naparima 1955",DATUM["Naparima_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-0.465,372.095,171.736,0,0,0,0],AUTHORITY["EPSG","6158"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4158"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2067"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2068 + +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 5",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2068"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2069 + +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 6",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2069"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2070 + +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 7",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2070"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2071 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 8",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2071"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2072 + +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 9",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2072"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2073 + +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 10",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2073"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2074 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 11",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2074"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2075 + +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 12",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2075"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2076 + +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / Libya zone 13",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2076"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2077 + +proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / UTM zone 32N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2077"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2078 + +proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / UTM zone 33N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2078"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2079 + +proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / UTM zone 34N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2079"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2080 + +proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / UTM zone 35N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2080"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2081 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs +PROJCS["Chos Malal 1914 / Argentina zone 2",GEOGCS["Chos Malal 1914",DATUM["Chos_Malal_1914",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6160"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4160"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2081"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2082 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs +PROJCS["Pampa del Castillo / Argentina zone 2",GEOGCS["Pampa del Castillo",DATUM["Pampa_del_Castillo",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTHORITY["EPSG","6161"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4161"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2082"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2083 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs +PROJCS["Hito XVIII 1963 / Argentina zone 2",GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2083"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2084 + +proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs +PROJCS["Hito XVIII 1963 / UTM zone 19S",GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2084"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2085 + +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Cuba Norte (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",22.35],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.99993602],PARAMETER["false_easting",500000],PARAMETER["false_northing",280296.016],AUTHORITY["EPSG","2085"],AXIS["Y",NORTH],AXIS["X",EAST]] + + + 2086 + +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Cuba Sur (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",20.71666666666667],PARAMETER["central_meridian",-76.83333333333333],PARAMETER["scale_factor",0.99994848],PARAMETER["false_easting",500000],PARAMETER["false_northing",229126.939],AUTHORITY["EPSG","2086"],AXIS["Y",NORTH],AXIS["X",EAST]] + + + 2087 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs +PROJCS["ELD79 / TM 12 NE",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2087"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2088 + +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs +PROJCS["Carthage / TM 11 NE",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2088"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2089 + +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Yemen NGN96 / UTM zone 38N",GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2089"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2090 + +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Yemen NGN96 / UTM zone 39N",GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2090"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2091 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs +PROJCS["South Yemen / Gauss Kruger zone 8 (deprecated)",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2091"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2092 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs +PROJCS["South Yemen / Gauss Kruger zone 9 (deprecated)",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2092"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2093 + +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs +PROJCS["Hanoi 1972 / GK 106 NE",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2093"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2094 + +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / TM 106 NE",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2095 + +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs +PROJCS["Bissau / UTM zone 28N",GEOGCS["Bissau",DATUM["Bissau",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-173,253,27,0,0,0,0],AUTHORITY["EPSG","6165"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4165"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2096 + +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +PROJCS["Korean 1985 / Korea East Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2096"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2097 + +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +PROJCS["Korean 1985 / Korea Central Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",127],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2097"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2098 + +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +PROJCS["Korean 1985 / Korea West Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",125],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2098"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2099 + +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs +PROJCS["Qatar 1948 / Qatar Grid",GEOGCS["Qatar 1948",DATUM["Qatar_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6286"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4286"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",25.38236111111111],PARAMETER["central_meridian",50.76138888888889],PARAMETER["false_easting",100000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2099"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2100 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs +PROJCS["GGRS87 / Greek Grid",GEOGCS["GGRS87",DATUM["Greek_Geodetic_Reference_System_1987",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY["EPSG","6121"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4121"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2101 + +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs +PROJCS["Lake / Maracaibo Grid M1",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-52684.972],AUTHORITY["EPSG","2101"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2102 + +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs +PROJCS["Lake / Maracaibo Grid",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",147315.028],AUTHORITY["EPSG","2102"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2103 + +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs +PROJCS["Lake / Maracaibo Grid M3",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",447315.028],AUTHORITY["EPSG","2103"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2104 + +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs +PROJCS["Lake / Maracaibo La Rosa Grid",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",-17044],PARAMETER["false_northing",-23139.97],AUTHORITY["EPSG","2104"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2105 + +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Mount Eden 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-36.87972222222222],PARAMETER["central_meridian",174.7641666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2105"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2106 + +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Bay of Plenty 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-37.76111111111111],PARAMETER["central_meridian",176.4661111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2106"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2107 + +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Poverty Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-38.62444444444444],PARAMETER["central_meridian",177.8855555555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2107"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2108 + +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Hawkes Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.65083333333333],PARAMETER["central_meridian",176.6736111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2108"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2109 + +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Taranaki 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.13555555555556],PARAMETER["central_meridian",174.2277777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2109"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2110 + +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Tuhirangi 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.51222222222222],PARAMETER["central_meridian",175.64],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2110"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2111 + +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Wanganui 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.24194444444444],PARAMETER["central_meridian",175.4880555555555],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2111"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2112 + +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Wairarapa 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.92527777777777],PARAMETER["central_meridian",175.6472222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2112"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2113 + +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Wellington 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.3011111111111],PARAMETER["central_meridian",174.7763888888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2113"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2114 + +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Collingwood 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.71472222222223],PARAMETER["central_meridian",172.6719444444444],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2114"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2115 + +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Nelson 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.27444444444444],PARAMETER["central_meridian",173.2991666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2115"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2116 + +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Karamea 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28972222222222],PARAMETER["central_meridian",172.1088888888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2116"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2117 + +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Buller 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.81055555555555],PARAMETER["central_meridian",171.5811111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2117"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2118 + +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Grey 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.33361111111111],PARAMETER["central_meridian",171.5497222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2118"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2119 + +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Amuri 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.68888888888888],PARAMETER["central_meridian",173.01],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2119"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2120 + +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Marlborough 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.54444444444444],PARAMETER["central_meridian",173.8019444444444],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2120"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2121 + +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Hokitika 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.88611111111111],PARAMETER["central_meridian",170.9797222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2121"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2122 + +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Okarito 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.11],PARAMETER["central_meridian",170.2608333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2122"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2123 + +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Jacksons Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.97777777777778],PARAMETER["central_meridian",168.6061111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2123"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2124 + +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Mount Pleasant 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.59055555555556],PARAMETER["central_meridian",172.7269444444445],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2124"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2125 + +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Gawler 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.74861111111111],PARAMETER["central_meridian",171.3605555555555],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2125"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2126 + +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Timaru 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.40194444444445],PARAMETER["central_meridian",171.0572222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2126"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2127 + +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Lindis Peak 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.735],PARAMETER["central_meridian",169.4675],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2127"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2128 + +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Mount Nicholas 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.13277777777778],PARAMETER["central_meridian",168.3986111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2128"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2129 + +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Mount York 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.56361111111111],PARAMETER["central_meridian",167.7386111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2129"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2130 + +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Observation Point 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.81611111111111],PARAMETER["central_meridian",170.6283333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2130"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2131 + +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / North Taieri 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.86138888888889],PARAMETER["central_meridian",170.2825],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2131"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2132 + +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Bluff 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-46.6],PARAMETER["central_meridian",168.3427777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2132"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2133 + +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / UTM zone 58S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2133"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2134 + +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / UTM zone 59S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2134"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2135 + +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / UTM zone 60S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2135"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2136 + +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs +PROJCS["Accra / Ghana National Grid",GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.666666666666667],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2136"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2137 + +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs +PROJCS["Accra / TM 1 NW",GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2137"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2138 + +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs +PROJCS["NAD27(CGQ77) / Quebec Lambert",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2138"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2139 + +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / SCoPQ zone 2 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2139"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2140 + +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 3 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2140"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2141 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 4 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2141"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2142 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 5 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2142"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2143 + +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 6 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2143"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2144 + +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 7 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2144"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2145 + +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 8 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2145"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2146 + +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 9 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2146"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2147 + +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / MTM zone 10 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2147"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2148 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 21N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2149 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 18N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2150 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 17N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2150"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2151 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 13N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2151"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2152 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 12N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2152"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2153 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / UTM zone 11N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2153"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2154 + +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / Lambert-93",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",44],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",3],PARAMETER["false_easting",700000],PARAMETER["false_northing",6600000],AUTHORITY["EPSG","2154"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2155 + +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs +PROJCS["American Samoa 1962 / American Samoa Lambert (deprecated)",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2155"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2156 + +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 59S (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2156"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2157 + +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IRENET95 / Irish Transverse Mercator",GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",0.99982],PARAMETER["false_easting",600000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","2157"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2158 + +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IRENET95 / UTM zone 29N",GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2158"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2159 + +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs +PROJCS["Sierra Leone 1924 / New Colony Grid",GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",6.666666666666667],PARAMETER["central_meridian",-12],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2159"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2160 + +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs +PROJCS["Sierra Leone 1924 / New War Office Grid",GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",6.666666666666667],PARAMETER["central_meridian",-12],PARAMETER["scale_factor",1],PARAMETER["false_easting",800000],PARAMETER["false_northing",600000],AUTHORITY["EPSG","2160"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2161 + +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs +PROJCS["Sierra Leone 1968 / UTM zone 28N",GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2161"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2162 + +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs +PROJCS["Sierra Leone 1968 / UTM zone 29N",GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2162"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2163 + +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs +PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","2163"]] + + + 2164 + +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs +PROJCS["Locodjo 1965 / TM 5 NW",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2164"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2165 + +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs +PROJCS["Abidjan 1987 / TM 5 NW",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2165"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2166 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2166"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2167 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2167"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2168 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2168"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2169 + +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs +PROJCS["Luxembourg 1930 / Gauss",GEOGCS["Luxembourg 1930",DATUM["Luxembourg_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-193,13.7,-39.3,-0.41,-2.933,2.688,0.43],AUTHORITY["EPSG","6181"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4181"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.83333333333334],PARAMETER["central_meridian",6.166666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",80000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2169"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2170 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Slovenia Grid (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2170"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2171 + +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone I (deprecated)",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",50.625],PARAMETER["central_meridian",21.08333333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4637000],PARAMETER["false_northing",5647000],AUTHORITY["EPSG","2171"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2172 + +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone II",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",53.00194444444445],PARAMETER["central_meridian",21.50277777777778],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4603000],PARAMETER["false_northing",5806000],AUTHORITY["EPSG","2172"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2173 + +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone III",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",53.58333333333334],PARAMETER["central_meridian",17.00833333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",3501000],PARAMETER["false_northing",5999000],AUTHORITY["EPSG","2173"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2174 + +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone IV",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",51.67083333333333],PARAMETER["central_meridian",16.67222222222222],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",3703000],PARAMETER["false_northing",5627000],AUTHORITY["EPSG","2174"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2175 + +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone V",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.95833333333333],PARAMETER["scale_factor",0.999983],PARAMETER["false_easting",237000],PARAMETER["false_northing",-4700000],AUTHORITY["EPSG","2175"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2176 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Poland CS2000 zone 5",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2176"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 2177 + +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Poland CS2000 zone 6",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2177"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 2178 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Poland CS2000 zone 7",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2178"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 2179 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Poland CS2000 zone 8",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2179"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 2180 + +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Poland CS92",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.9993],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5300000],AUTHORITY["EPSG","2180"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 2188 + +proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs +PROJCS["Azores Occidental 1939 / UTM zone 25N",GEOGCS["Azores Occidental 1939",DATUM["Azores_Occidental_Islands_1939",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-425,-169,81,0,0,0,0],AUTHORITY["EPSG","6182"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4182"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2189 + +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs +PROJCS["Azores Central 1948 / UTM zone 26N",GEOGCS["Azores Central 1948",DATUM["Azores_Central_Islands_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,167,-38,0,0,0,0],AUTHORITY["EPSG","6183"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4183"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2190 + +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs +PROJCS["Azores Oriental 1940 / UTM zone 26N",GEOGCS["Azores Oriental 1940",DATUM["Azores_Oriental_Islands_1940",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-203,141,53,0,0,0,0],AUTHORITY["EPSG","6184"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4184"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2190"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2191 + +proj=utm +zone=28 +ellps=intl +units=m +no_defs +PROJCS["Madeira 1936 / UTM zone 28N (deprecated)",GEOGCS["Madeira 1936",DATUM["Madeira_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6185"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4185"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2192 + +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / France EuroLambert",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.8],PARAMETER["central_meridian",2.337229166666667],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","2192"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2193 + +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / New Zealand Transverse Mercator 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",173],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1600000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2193"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2194 + +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs +PROJCS["American Samoa 1962 / American Samoa Lambert (deprecated)",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2194"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2195 + +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 2S",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2196 + +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Kp2000 Jutland",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9.5],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2196"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2197 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Kp2000 Zealand",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2197"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2198 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Kp2000 Bornholm",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2198"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2199 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["Albanian 1987 / Gauss Kruger zone 4 (deprecated)",GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2199"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2200 + +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / New Brunswick Stereographic (ATS77)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",300000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2200"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2201 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["REGVEN / UTM zone 18N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2202 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["REGVEN / UTM zone 19N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2203 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["REGVEN / UTM zone 20N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2204 + +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Tennessee",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.25],PARAMETER["standard_parallel_2",36.41666666666666],PARAMETER["latitude_of_origin",34.66666666666666],PARAMETER["central_meridian",-86],PARAMETER["false_easting",2000000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2204"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2205 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kentucky North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2205"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2206 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 9",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2206"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2207 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 10",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2207"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2208 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 11",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2208"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2209 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 12",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2209"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2210 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 13",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2210"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2211 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 14",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2211"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2212 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / 3-degree Gauss-Kruger zone 15",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2212"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2213 + +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / TM 30 NE",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2214 + +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs +PROJCS["Douala 1948 / AOF west (deprecated)",GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.5],PARAMETER["scale_factor",0.999],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2215 + +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs +PROJCS["Manoca 1962 / UTM zone 32N",GEOGCS["Manoca 1962",DATUM["Manoca_1962",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6193"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4193"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2216 + +proj=utm +zone=22 +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +units=m +no_defs +PROJCS["Qornoq 1927 / UTM zone 22N",GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2217 + +proj=utm +zone=23 +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +units=m +no_defs +PROJCS["Qornoq 1927 / UTM zone 23N",GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2219 + +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / UTM zone 19N",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2220 + +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / UTM zone 20N",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2222 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Arizona East (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2222"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2223 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Arizona Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2223"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2224 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Arizona West (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2224"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2225 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 1 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2225"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2226 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 2 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2226"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2227 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 3 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2227"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2228 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 4 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2228"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2229 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 5 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2229"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2230 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / California zone 6 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2230"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2231 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Colorado North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2231"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2232 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Colorado Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2232"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2233 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Colorado South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2233"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2234 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Connecticut (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2234"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2235 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Delaware (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2235"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2236 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Florida East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2236"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2237 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Florida West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2237"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2238 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Florida North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2238"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2239 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Georgia East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2239"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2240 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Georgia West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2240"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2241 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Idaho East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2241"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2242 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Idaho Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2242"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2243 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Idaho West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2243"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2244 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Indiana East (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2244"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2245 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Indiana West (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2245"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2246 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Kentucky North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2246"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2247 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Kentucky South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2247"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2248 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Maryland (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2248"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2249 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Massachusetts Mainland (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","2249"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2250 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Massachusetts Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2250"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2251 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Michigan North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","2251"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2252 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Michigan Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","2252"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2253 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Michigan South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","2253"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2254 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Mississippi East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2254"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2255 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Mississippi West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2255"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2256 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Montana (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2256"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2257 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New Mexico East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","2257"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2258 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New Mexico Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2258"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2259 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New Mexico West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2259"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2260 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New York East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2260"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2261 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New York Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2261"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2262 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New York West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2262"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2263 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New York Long Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2263"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2264 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / North Carolina (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2264"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2265 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / North Dakota North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2265"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2266 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / North Dakota South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2266"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2267 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Oklahoma North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2267"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2268 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Oklahoma South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2268"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2269 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Oregon North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","2269"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2270 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Oregon South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","2270"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2271 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Pennsylvania North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2271"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2272 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Pennsylvania South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2272"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2273 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / South Carolina (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2273"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2274 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Tennessee (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2274"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2275 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Texas North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2275"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2276 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Texas North Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2276"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2277 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Texas Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","2277"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2278 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Texas South Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","2278"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2279 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Texas South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","2279"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2280 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Utah North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","2280"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2281 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Utah Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","2281"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2282 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Utah South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","2282"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2283 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Virginia North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2283"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2284 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Virginia South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2284"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2285 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Washington North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2285"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2286 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Washington South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2286"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2287 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wisconsin North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2287"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2288 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wisconsin Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2288"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2289 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wisconsin South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2289"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2290 + +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / Prince Edward Isl. Stereographic (ATS77)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",700000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2290"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2291 + +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2291"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2292 + +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2292"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2294 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / MTM Nova Scotia zone 4",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2294"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2295 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs +PROJCS["ATS77 / MTM Nova Scotia zone 5",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2295"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2308 + +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs +PROJCS["Batavia / TM 109 SE",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",109],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2309 + +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TM 116 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",116],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2309"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2310 + +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TM 132 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2310"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2311 + +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TM 6 NE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2312 + +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs +PROJCS["Garoua / UTM zone 33N",GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6197"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4197"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2313 + +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs +PROJCS["Kousseri / UTM zone 33N",GEOGCS["Kousseri",DATUM["Kousseri",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6198"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4198"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2314 + +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs +PROJCS["Trinidad 1903 / Trinidad Grid (ftCla)",GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]],UNIT["Clarke's foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",10.44166666666667],PARAMETER["central_meridian",-61.33333333333334],PARAMETER["false_easting",283800],PARAMETER["false_northing",214500],AUTHORITY["EPSG","2314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2315 + +proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / UTM zone 19S",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2316 + +proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / UTM zone 20S",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2317 + +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / ICN Regional",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",9],PARAMETER["standard_parallel_2",3],PARAMETER["latitude_of_origin",6],PARAMETER["central_meridian",-66],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2317"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2318 + +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / Aramco Lambert",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",17],PARAMETER["standard_parallel_2",33],PARAMETER["latitude_of_origin",25.08951],PARAMETER["central_meridian",48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2319 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM27",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2319"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2320 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM30",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2320"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2321 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM33",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2321"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2322 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM36",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2322"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2323 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM39",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2323"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2324 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM42",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2324"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2325 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM45",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2325"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2326 + +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs +PROJCS["Hong Kong 1980 Grid System",GEOGCS["Hong Kong 1980",DATUM["Hong_Kong_1980",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425],AUTHORITY["EPSG","6611"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4611"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",836694.05],PARAMETER["false_northing",819069.8],AUTHORITY["EPSG","2326"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2327 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 13",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2327"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2328 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 14",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2328"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2329 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 15",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2329"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2330 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 16",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2330"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2331 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 17",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2331"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2332 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 18",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2332"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2333 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 19",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2333"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2334 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 20",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2334"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2335 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 21",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2335"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2336 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 22",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2336"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2337 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger zone 23",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2337"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2338 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 75E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2338"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2339 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 81E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2339"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2340 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 87E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2340"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2341 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 93E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2341"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2342 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 99E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2342"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2343 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 105E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2343"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2344 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 111E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2344"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2345 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 117E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2345"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2346 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 123E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2346"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2347 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 129E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2347"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2348 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / Gauss-Kruger CM 135E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2348"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2349 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 25",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2349"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2350 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 26",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2350"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2351 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 27",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2351"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2352 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 28",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2352"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2353 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 29",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2353"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2354 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 30",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2354"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2355 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 31",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2355"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2356 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 32",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2356"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2357 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 33",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2357"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2358 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 34",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2358"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2359 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 35",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2359"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2360 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 36",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2360"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2361 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 37",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2361"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2362 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 38",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2362"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2363 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 39",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2363"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2364 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 40",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2364"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2365 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 41",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2365"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2366 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 42",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2366"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2367 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 43",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2367"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2368 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 44",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2368"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2369 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 45",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2369"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2370 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2370"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2371 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2371"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2372 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2372"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2373 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2373"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2374 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2374"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2375 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2375"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2376 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2376"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2377 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2377"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2378 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2378"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2379 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2379"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2380 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2380"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2381 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2381"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2382 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2382"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2383 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2383"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2384 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2384"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2385 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2385"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2386 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2386"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2387 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2387"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2388 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2388"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2389 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2389"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2390 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs +PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2390"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2391 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland zone 1",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2391"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2392 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland zone 2",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2392"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2393 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland Uniform Coordinate System",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2393"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2394 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland zone 4",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2394"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2395 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs +PROJCS["South Yemen / Gauss-Kruger zone 8",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2395"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2396 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs +PROJCS["South Yemen / Gauss-Kruger zone 9",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2396"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2397 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2397"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2398 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2398"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2399 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2399"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2400 + +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 2.5 gon W (deprecated)",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2400"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2401 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 25",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2401"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2402 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 26",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2402"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2403 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 27",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2403"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2404 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 28",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2404"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2405 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 29",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2405"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2406 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 30",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2406"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2407 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 31",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2407"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2408 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 32",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2408"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2409 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 33",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2409"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2410 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 34",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2410"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2411 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 35",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2411"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2412 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 36",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2412"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2413 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 37",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2413"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2414 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 38",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2414"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2415 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 39",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2415"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2416 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 40",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2416"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2417 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 41",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2417"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2418 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 42",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2418"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2419 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 43",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2419"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2420 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 44",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2420"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2421 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 45",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2421"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2422 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2422"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2423 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2423"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2424 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2424"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2425 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2425"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2426 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2426"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2427 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2427"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2428 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2428"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2429 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2429"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2430 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2430"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2431 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2431"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2432 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2432"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2433 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2433"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2434 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2434"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2435 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2435"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2436 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2436"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2437 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2437"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2438 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2438"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2439 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2439"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2440 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2440"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2441 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2441"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2442 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2442"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2443 + +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS I",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",129.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2443"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2444 + +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS II",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2444"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2445 + +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS III",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",132.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2445"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2446 + +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS IV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2446"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2447 + +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS V",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",134.3333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2447"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2448 + +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS VI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2448"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2449 + +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS VII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",137.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2449"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2450 + +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS VIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",138.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2450"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2451 + +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS IX",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",139.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2451"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2452 + +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS X",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",140.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2452"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2453 + +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",140.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2453"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2454 + +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",142.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2454"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2455 + +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",144.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2455"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2456 + +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XIV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2456"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2457 + +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2457"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2458 + +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XVI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",124],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2458"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2459 + +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XVII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2459"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2460 + +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XVIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2460"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2461 + +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / Japan Plane Rectangular CS XIX",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2461"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2462 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["Albanian 1987 / Gauss-Kruger zone 4",GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2462"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2463 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2463"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2464 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2464"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2465 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2465"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2466 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2466"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2467 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2467"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2468 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2468"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2469 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2469"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2470 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2470"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2471 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2471"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2472 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2472"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2473 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2473"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2474 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2474"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2475 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2475"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2476 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2476"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2477 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2477"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2478 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2478"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2479 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2479"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2480 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2480"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2481 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2481"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2482 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2482"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2483 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2483"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2484 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2484"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2485 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2485"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2486 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2486"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2487 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2487"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2488 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2488"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2489 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2489"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2490 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2490"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2491 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2491"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2492 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2492"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2493 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2493"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2494 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2494"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2495 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2495"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2496 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2496"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2497 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2497"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2498 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2498"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2499 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2499"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2500 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2500"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2501 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2501"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2502 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2502"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2503 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2503"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2504 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2504"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2505 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2505"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2506 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2506"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2507 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2507"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2508 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2508"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2509 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2509"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2510 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2510"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2511 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2511"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2512 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2512"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2513 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2513"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2514 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2514"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2515 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2515"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2516 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2516"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2517 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2517"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2518 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2518"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2519 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2519"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2520 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2520"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2521 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2521"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2522 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2522"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2523 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2523"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2524 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2524"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2525 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2525"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2526 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2526"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2527 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 11",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2527"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2528 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 12",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2528"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2529 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 13",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2529"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2530 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 14",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2530"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2531 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 15",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2531"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2532 + +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 16",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2532"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2533 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 17",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2533"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2534 + +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 18",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2534"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2535 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 19",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2535"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2536 + +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 20",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2536"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2537 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 21",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2537"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2538 + +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 22",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2538"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2539 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 23",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2539"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2540 + +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 24",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2540"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2541 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 25",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2541"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2542 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 26",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2542"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2543 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 27",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2543"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2544 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 28",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2544"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2545 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 29",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2545"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2546 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 30",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2546"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2547 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 31",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2547"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2548 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 32",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2548"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2549 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 33",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2549"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2550 + +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs +PROJCS["Samboja / UTM zone 50S (deprecated)",GEOGCS["Samboja",DATUM["Samboja",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY["EPSG","6125"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4125"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2550"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2551 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 34",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2551"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2552 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 35",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2552"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2553 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 36",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2553"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2554 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 37",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2554"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2555 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 38",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2555"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2556 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 39",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2556"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2557 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 40",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2557"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2558 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 41",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2558"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2559 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 42",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2559"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2560 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 43",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2560"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2561 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 44",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2561"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2562 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 45",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2562"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2563 + +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 46",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",46500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2563"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2564 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 47",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",47500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2564"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2565 + +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 48",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",48500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2565"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2566 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 49",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",49500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2566"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2567 + +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 50",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",50500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2567"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2568 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 51",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",51500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2568"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2569 + +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 52",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",52500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2569"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2570 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 53",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",53500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2570"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2571 + +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 54",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",54500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2571"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2572 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 55",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",55500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2572"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2573 + +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 56",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",56500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2573"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2574 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 57",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",57500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2574"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2575 + +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 58",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",58500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2575"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2576 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 59",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",59500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2576"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2577 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2577"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2578 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 61",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",61500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2578"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2579 + +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 62",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",62500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2579"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2580 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 63",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",63500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2580"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2581 + +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 64",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",64500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2581"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2582 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2582"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2583 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2583"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2584 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2584"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2585 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2585"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2586 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2586"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2587 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2587"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2588 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2588"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2589 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2589"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2590 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2590"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2591 + +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2591"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2592 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2592"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2593 + +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2593"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2594 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2594"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2595 + +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2595"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2596 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2596"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2597 + +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2597"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2598 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2598"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2599 + +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2599"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2600 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Lietuvos Koordinoei Sistema 1994 (deprecated)",GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2600"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2601 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2601"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2602 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2602"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2603 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2603"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2604 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2604"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2605 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2605"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2606 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2606"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2607 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2607"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2608 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2608"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2609 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2609"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2610 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2610"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2611 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2611"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2612 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2612"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2613 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2613"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2614 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2614"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2615 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2615"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2616 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2616"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2617 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2617"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2618 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2618"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2619 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2619"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2620 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2620"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2621 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2621"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2622 + +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2622"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2623 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2623"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2624 + +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2624"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2625 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2625"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2626 + +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2626"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2627 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2627"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2628 + +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2628"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2629 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2629"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2630 + +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2630"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2631 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2631"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2632 + +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2632"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2633 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2633"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2634 + +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2634"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2635 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2635"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2636 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2636"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2637 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2637"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2638 + +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2638"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2639 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2639"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2640 + +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2640"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2641 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2641"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2642 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2642"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2643 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2643"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2644 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2644"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2645 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 11",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2645"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2646 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 12",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2646"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2647 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 13",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2647"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2648 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 14",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2648"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2649 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 15",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2649"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2650 + +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 16",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2650"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2651 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 17",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2651"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2652 + +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 18",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2652"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2653 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 19",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2653"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2654 + +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 20",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2654"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2655 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 21",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2655"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2656 + +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 22",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2656"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2657 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 23",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2657"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2658 + +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 24",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2658"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2659 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 25",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2659"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2660 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 26",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2660"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2661 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 27",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2661"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2662 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 28",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2662"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2663 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 29",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2663"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2664 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 30",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2664"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2665 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 31",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2665"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2666 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 32",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2666"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2667 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 33",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2667"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2668 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 34",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2668"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2669 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 35",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2669"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2670 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 36",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2670"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2671 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 37",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2671"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2672 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 38",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2672"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2673 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 39",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2673"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2674 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 40",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2674"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2675 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 41",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2675"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2676 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 42",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2676"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2677 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 43",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2677"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2678 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 44",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2678"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2679 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 45",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2679"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2680 + +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 46",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",46500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2680"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2681 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 47",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",47500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2681"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2682 + +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 48",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",48500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2682"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2683 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 49",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",49500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2683"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2684 + +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 50",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",50500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2684"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2685 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 51",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",51500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2685"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2686 + +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 52",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",52500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2686"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2687 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 53",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",53500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2687"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2688 + +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 54",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",54500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2688"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2689 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 55",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",55500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2689"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2690 + +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 56",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",56500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2690"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2691 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 57",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",57500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2691"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2692 + +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 58",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",58500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2692"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2693 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 59",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",59500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2693"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2694 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2694"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2695 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 61",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",61500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2695"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2696 + +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 62",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",62500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2696"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2697 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 63",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",63500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2697"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2698 + +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 64",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",64500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2698"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2699 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2699"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2700 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2700"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2701 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2701"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2702 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2702"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2703 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2703"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2704 + +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2704"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2705 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2705"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2706 + +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2706"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2707 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2707"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2708 + +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2708"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2709 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2709"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2710 + +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2710"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2711 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2711"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2712 + +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2712"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2713 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2713"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2714 + +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2714"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2715 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2715"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2716 + +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2716"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2717 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2717"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2718 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2718"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2719 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2719"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2720 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2720"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2721 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2721"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2722 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2722"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2723 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2723"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2724 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2724"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2725 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2725"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2726 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2726"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2727 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2727"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2728 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2728"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2729 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2729"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2730 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2730"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2731 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2731"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2732 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2732"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2733 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2733"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2734 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2734"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2735 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2735"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2736 + +proj=utm +zone=36 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs +PROJCS["Tete / UTM zone 36S",GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2736"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2737 + +proj=utm +zone=37 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs +PROJCS["Tete / UTM zone 37S",GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2737"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2738 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2738"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2739 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2739"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2740 + +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2740"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2741 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2741"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2742 + +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2742"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2743 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2743"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2744 + +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2744"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2745 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2745"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2746 + +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2746"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2747 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2747"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2748 + +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2748"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2749 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2749"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2750 + +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2750"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2751 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2751"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2752 + +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2752"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2753 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2753"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2754 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2754"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2755 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2755"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2756 + +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2756"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2757 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2757"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2758 + +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2758"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2759 + +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Alabama East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2759"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2760 + +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Alabama West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2760"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2761 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Arizona East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2761"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2762 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Arizona Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2762"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2763 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Arizona West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2763"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2764 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Arkansas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2764"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2765 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Arkansas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2765"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2766 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 1",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2766"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2767 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 2",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2767"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2768 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 3",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2768"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2769 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 4",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2769"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2770 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 5",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2770"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2771 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California zone 6",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2771"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2772 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Colorado North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2772"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2773 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Colorado Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2773"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2774 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Colorado South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2774"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2775 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Connecticut",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","2775"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2776 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Delaware",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2776"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2777 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Florida East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2777"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2778 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Florida West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2778"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2779 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Florida North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2779"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2780 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Georgia East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2780"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2781 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Georgia West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2781"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2782 + +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 1",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2782"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2783 + +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 2",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2783"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2784 + +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 3",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2784"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2785 + +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 4",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2785"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2786 + +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 5",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2786"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2787 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Idaho East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2787"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2788 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Idaho Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2788"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2789 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Idaho West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2789"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2790 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Illinois East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2790"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2791 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Illinois West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2791"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2792 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Indiana East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","2792"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2793 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Indiana West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","2793"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2794 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Iowa North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2794"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2795 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Iowa South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2795"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2796 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Kansas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2796"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2797 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Kansas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2797"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2798 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Kentucky North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2798"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2799 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Kentucky South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2799"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2800 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Louisiana North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2800"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2801 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Louisiana South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2801"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2802 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2802"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2803 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2803"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2804 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maryland",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2804"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2805 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Massachusetts Mainland",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","2805"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2806 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Massachusetts Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2806"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2807 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Michigan North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2807"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2808 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Michigan Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2808"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2809 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Michigan South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2809"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2810 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2810"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2811 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2811"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2812 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2812"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2813 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Mississippi East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2813"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2814 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Mississippi West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2814"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2815 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Missouri East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2815"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2816 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Missouri Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2816"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2817 + +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Missouri West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2817"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2818 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Montana",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2818"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2819 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Nebraska",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2819"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2820 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Nevada East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","2820"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2821 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Nevada Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","2821"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2822 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Nevada West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","2822"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2823 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New Hampshire",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2823"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2824 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New Jersey",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2824"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2825 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New Mexico East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2825"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2826 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New Mexico Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2826"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2827 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New Mexico West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2827"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2828 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New York East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2828"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2829 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New York Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2829"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2830 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New York West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2830"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2831 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / New York Long Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2831"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2832 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / North Dakota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2832"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2833 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / North Dakota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2833"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2834 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Ohio North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2834"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2835 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Ohio South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2835"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2836 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Oklahoma North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2836"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2837 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Oklahoma South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2837"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2838 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Oregon North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2838"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2839 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Oregon South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2839"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2840 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Rhode Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2840"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2841 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / South Dakota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2841"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2842 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / South Dakota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2842"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2843 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Tennessee",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2843"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2844 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2844"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2845 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas North Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2845"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2846 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","2846"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2847 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas South Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","2847"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2848 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","2848"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2849 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Utah North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2849"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2850 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Utah Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2850"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2851 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Utah South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","2851"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2852 + +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Vermont",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2852"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2853 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Virginia North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2853"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2854 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Virginia South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2854"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2855 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Washington North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2855"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2856 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Washington South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2856"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2857 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / West Virginia North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2857"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2858 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / West Virginia South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2858"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2859 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wisconsin North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2859"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2860 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wisconsin Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2860"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2861 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wisconsin South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2861"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2862 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wyoming East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2862"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2863 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wyoming East Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2863"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2864 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wyoming West Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2864"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2865 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wyoming West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2865"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2866 + +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Puerto Rico and Virgin Is.",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","2866"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2867 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Arizona East (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2867"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2868 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Arizona Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2868"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2869 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Arizona West (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2869"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2870 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 1 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2870"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2871 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 2 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2871"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2872 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 3 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2872"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2873 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 4 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2873"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2874 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 5 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2874"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2875 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / California zone 6 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2875"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2876 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Colorado North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2876"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2877 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Colorado Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2877"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2878 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Colorado South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2878"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2879 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Connecticut (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2879"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2880 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Delaware (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2880"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2881 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Florida East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2881"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2882 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Florida West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2882"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2883 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Florida North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2883"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2884 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Georgia East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2884"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2885 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Georgia West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2885"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2886 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Idaho East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2886"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2887 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Idaho Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2887"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2888 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Idaho West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2888"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2889 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Indiana East (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2889"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2890 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Indiana West (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2890"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2891 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Kentucky North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2891"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2892 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Kentucky South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2892"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2893 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Maryland (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2893"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2894 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Massachusetts Mainland (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","2894"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2895 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Massachusetts Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2895"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2896 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Michigan North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","2896"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2897 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Michigan Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","2897"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2898 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Michigan South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","2898"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2899 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Mississippi East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2899"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2900 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Mississippi West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2900"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2901 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Montana (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2901"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2902 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New Mexico East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","2902"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2903 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2903"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2904 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New Mexico West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2904"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2905 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New York East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2905"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2906 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New York Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2906"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2907 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New York West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2907"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2908 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New York Long Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2908"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2909 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / North Dakota North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2909"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2910 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / North Dakota South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2910"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2911 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Oklahoma North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2911"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2912 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Oklahoma South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2912"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2913 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Oregon North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","2913"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2914 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Oregon South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","2914"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2915 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Tennessee (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2915"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2916 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Texas North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2916"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2917 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Texas North Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2917"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2918 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Texas Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","2918"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2919 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Texas South Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","2919"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2920 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Texas South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","2920"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2921 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Utah North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","2921"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2922 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Utah Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","2922"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2923 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Utah South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","2923"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2924 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Virginia North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2924"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2925 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Virginia South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2925"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2926 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Washington North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2926"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2927 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Washington South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2927"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2928 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wisconsin North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2928"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2929 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wisconsin Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2929"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2930 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wisconsin South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2930"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2931 + +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs +PROJCS["Beduaram / TM 13 NE",GEOGCS["Beduaram",DATUM["Beduaram",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-106,-87,188,0,0,0,0],AUTHORITY["EPSG","6213"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4213"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2931"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2932 + +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs +PROJCS["QND95 / Qatar National Grid",GEOGCS["QND95",DATUM["Qatar_National_Datum_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706],AUTHORITY["EPSG","6614"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4614"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.45],PARAMETER["central_meridian",51.21666666666667],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","2932"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2933 + +proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs +PROJCS["Segara / UTM zone 50S",GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2933"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2934 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs +PROJCS["Segara (Jakarta) / NEIEZ (deprecated)",GEOGCS["Segara (Jakarta)",DATUM["Gunung_Segara_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6820"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4820"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","2934"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2935 + +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone A1",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",41.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",1300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2935"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2936 + +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone A2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",44.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",2300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2936"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2937 + +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone A3",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",47.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",3300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2937"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2938 + +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone A4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",50.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",4300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2938"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2939 + +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone K2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",50.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",2300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2939"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2940 + +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone K3",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",53.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",3300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2940"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2941 + +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone K4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",56.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",4300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2941"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 2942 + +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs +PROJCS["Porto Santo / UTM zone 28N",GEOGCS["Porto Santo",DATUM["Porto_Santo_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-499,-249,314,0,0,0,0],AUTHORITY["EPSG","6615"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4615"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2942"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2943 + +proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs +PROJCS["Selvagem Grande / UTM zone 28N",GEOGCS["Selvagem Grande",DATUM["Selvagem_Grande",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-289,-124,60,0,0,0,0],AUTHORITY["EPSG","6616"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4616"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2943"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2944 + +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / SCoPQ zone 2",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2944"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2945 + +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 3",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2945"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2946 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 4",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2946"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2947 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 5",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2947"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2948 + +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 6",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2948"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2949 + +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 7",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2949"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2950 + +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 8",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2950"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2951 + +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 9",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2951"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2952 + +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 10",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2952"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2953 + +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / New Brunswick Stereographic",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",2500000],PARAMETER["false_northing",7500000],AUTHORITY["EPSG","2953"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 2954 + +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2954"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 2955 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 11N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2955"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2956 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 12N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2956"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2957 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 13N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2957"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2958 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 17N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2958"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2959 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 18N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2959"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2960 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 19N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2960"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2961 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 20N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2961"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2962 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 21N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2962"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2964 + +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2964"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2965 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Indiana East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2965"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2966 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Indiana West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2966"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2967 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Indiana East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2967"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2968 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Indiana West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2968"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2969 + +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs +PROJCS["Fort Marigot / UTM zone 20N",GEOGCS["Fort Marigot",DATUM["Fort_Marigot",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[137,248,-430,0,0,0,0],AUTHORITY["EPSG","6621"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4621"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2969"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2970 + +proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs +PROJCS["Guadeloupe 1948 / UTM zone 20N",GEOGCS["Guadeloupe 1948",DATUM["Guadeloupe_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-467,-16,-300,0,0,0,0],AUTHORITY["EPSG","6622"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4622"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2970"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2971 + +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs +PROJCS["CSG67 / UTM zone 22N",GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2971"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2972 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs +PROJCS["RGFG95 / UTM zone 22N",GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2972"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2973 + +proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs +PROJCS["Martinique 1938 / UTM zone 20N",GEOGCS["Martinique 1938",DATUM["Martinique_1938",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[186,482,151,0,0,0,0],AUTHORITY["EPSG","6625"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4625"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2973"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2975 + +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGR92 / UTM zone 40S",GEOGCS["RGR92",DATUM["Reseau_Geodesique_de_la_Reunion_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6627"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4627"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2975"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2976 + +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs +PROJCS["Tahiti 52 / UTM zone 6S",GEOGCS["Tahiti 52",DATUM["Tahiti_52",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[162,117,154,0,0,0,0],AUTHORITY["EPSG","6628"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4628"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2976"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2977 + +proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs +PROJCS["Tahaa 54 / UTM zone 5S",GEOGCS["Tahaa 54",DATUM["Tahaa_54",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746],AUTHORITY["EPSG","6629"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4629"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2977"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2978 + +proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs +PROJCS["IGN72 Nuku Hiva / UTM zone 7S",GEOGCS["IGN72 Nuku Hiva",DATUM["IGN72_Nuku_Hiva",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[84,274,65,0,0,0,0],AUTHORITY["EPSG","6630"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4630"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2979 + +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs +PROJCS["K0 1949 / UTM zone 42S (deprecated)",GEOGCS["K0 1949",DATUM["K0_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6631"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4631"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2980 + +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs +PROJCS["Combani 1950 / UTM zone 38S",GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2980"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2981 + +proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs +PROJCS["IGN56 Lifou / UTM zone 58S",GEOGCS["IGN56 Lifou",DATUM["IGN56_Lifou",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[335.47,222.58,-230.94,0,0,0,0],AUTHORITY["EPSG","6633"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4633"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2981"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2982 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs +PROJCS["IGN72 Grand Terre / UTM zone 58S (deprecated)",GEOGCS["IGN72 Grand Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4634"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2982"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2983 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs +PROJCS["ST87 Ouvea / UTM zone 58S (deprecated)",GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798],AUTHORITY["EPSG","6635"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4635"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2983"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2984 + +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGNC 1991 / Lambert New Caledonia (deprecated)",GEOGCS["RGNC 1991",DATUM["Reseau_Geodesique_Nouvelle_Caledonie_1991",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6645"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4645"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-20.66666666666667],PARAMETER["standard_parallel_2",-22.33333333333333],PARAMETER["latitude_of_origin",-21.5],PARAMETER["central_meridian",166],PARAMETER["false_easting",400000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","2984"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2987 + +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs +PROJCS["Saint Pierre et Miquelon 1950 / UTM zone 21N",GEOGCS["Saint Pierre et Miquelon 1950",DATUM["Saint_Pierre_et_Miquelon_1950",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[30,430,368,0,0,0,0],AUTHORITY["EPSG","6638"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4638"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2987"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2988 + +proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs +PROJCS["MOP78 / UTM zone 1S",GEOGCS["MOP78",DATUM["MOP78",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[253,-132,-127,0,0,0,0],AUTHORITY["EPSG","6639"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4639"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2988"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2989 + +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RRAF 1991 / UTM zone 20N (deprecated)",GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6640"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4640"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2989"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2990 + +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs +PROJCS["Reunion 1947 / TM Reunion (deprecated)",GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-21.11666666666667],PARAMETER["central_meridian",55.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",50000],PARAMETER["false_northing",160000],AUTHORITY["EPSG","2990"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2991 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Oregon Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2991"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2992 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83 / Oregon Lambert (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2992"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2993 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Oregon Lambert",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2993"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2994 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / Oregon Lambert (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2994"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 2995 + +proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs +PROJCS["IGN53 Mare / UTM zone 58S",GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2995"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2996 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs +PROJCS["ST84 Ile des Pins / UTM zone 58S",GEOGCS["ST84 Ile des Pins",DATUM["ST84_Ile_des_Pins",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6642"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4642"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2996"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2997 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs +PROJCS["ST71 Belep / UTM zone 58S",GEOGCS["ST71 Belep",DATUM["ST71_Belep",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7],AUTHORITY["EPSG","6643"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4643"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2998 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs +PROJCS["NEA74 Noumea / UTM zone 58S",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2998"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 2999 + +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs +PROJCS["Grand Comoros / UTM zone 38S",GEOGCS["Grand Comoros",DATUM["Grand_Comoros",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6646"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4646"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2999"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3000 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs +PROJCS["Segara / NEIEZ",GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3000"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3001 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs +PROJCS["Batavia / NEIEZ",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3001"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3002 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs +PROJCS["Makassar / NEIEZ",GEOGCS["Makassar",DATUM["Makassar",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6257"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4257"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3002"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3003 + +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs +PROJCS["Monte Mario / Italy zone 1",GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3003"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3004 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs +PROJCS["Monte Mario / Italy zone 2",GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2520000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3004"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3005 + +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / BC Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",58.5],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-126],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3005"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3006 + +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 TM",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3006"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3007 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 12 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3007"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3008 + +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 13 30",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3008"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3009 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 15 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3009"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3010 + +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 16 30",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3010"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3011 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 18 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3011"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3012 + +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 14 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3012"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3013 + +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 15 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3013"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3014 + +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 17 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3014"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3015 + +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 18 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3015"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3016 + +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 20 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3016"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3017 + +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 21 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3017"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3018 + +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 23 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3018"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3019 + +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 7.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3019"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3020 + +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3020"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3021 + +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 2.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3021"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3022 + +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 0 gon",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3022"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3023 + +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 2.5 gon O",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3023"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3024 + +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs +PROJCS["RT90 5 gon O",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3024"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3025 + +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 7.5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3025"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3026 + +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3026"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3027 + +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 2.5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3027"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3028 + +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 0 gon",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3028"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3029 + +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 2.5 gon O",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3029"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3030 + +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 5 gon O",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3030"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3031 + +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Antarctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-71],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3032 + +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Australian Antarctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-71],PARAMETER["central_meridian",70],PARAMETER["scale_factor",1],PARAMETER["false_easting",6000000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3033 + +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Australian Antarctic Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.5],PARAMETER["standard_parallel_2",-74.5],PARAMETER["latitude_of_origin",-50],PARAMETER["central_meridian",70],PARAMETER["false_easting",6000000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3034 + +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-LCC",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",10],PARAMETER["false_easting",4000000],PARAMETER["false_northing",2800000],AUTHORITY["EPSG","3034"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3035 + +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-LAEA",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",52],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],AUTHORITY["EPSG","3035"],AXIS["Y",NORTH],AXIS["X",EAST]] + + + 3036 + +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs +PROJCS["Moznet / UTM zone 36S",GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3037 + +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs +PROJCS["Moznet / UTM zone 37S",GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3038 + +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM26",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3038"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3039 + +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM27",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3039"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3040 + +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM28",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3040"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3041 + +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM29",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3041"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3042 + +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM30",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3042"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3043 + +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM31",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3043"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3044 + +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM32",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3044"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3045 + +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM33",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3045"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3046 + +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM34",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3046"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3047 + +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM35",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3047"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3048 + +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM36",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3048"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3049 + +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM37",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3049"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3050 + +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM38",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3050"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3051 + +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM39",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3051"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3054 + +proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs +PROJCS["Hjorsey 1955 / UTM zone 26N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3054"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3055 + +proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs +PROJCS["Hjorsey 1955 / UTM zone 27N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3055"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3056 + +proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs +PROJCS["Hjorsey 1955 / UTM zone 28N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3056"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3057 + +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ISN93 / Lambert 1993",GEOGCS["ISN93",DATUM["Islands_Network_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6659"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4659"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",64.25],PARAMETER["standard_parallel_2",65.75],PARAMETER["latitude_of_origin",65],PARAMETER["central_meridian",-19],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3057"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3058 + +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs +PROJCS["Helle 1954 / Jan Mayen Grid",GEOGCS["Helle 1954",DATUM["Helle_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805],AUTHORITY["EPSG","6660"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4660"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-8.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",50000],PARAMETER["false_northing",-7800000],AUTHORITY["EPSG","3058"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3059 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["LKS92 / Latvia TM",GEOGCS["LKS92",DATUM["Latvia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6661"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4661"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",-6000000],AUTHORITY["EPSG","3059"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3060 + +proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs +PROJCS["IGN72 Grande Terre / UTM zone 58S",GEOGCS["IGN72 Grande Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-11.64,-348.6,291.98,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4662"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3060"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3061 + +proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs +PROJCS["Porto Santo 1995 / UTM zone 28N",GEOGCS["Porto Santo 1995",DATUM["Porto_Santo_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-502.862,-247.438,312.724,0,0,0,0],AUTHORITY["EPSG","6663"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4663"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3061"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3062 + +proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs +PROJCS["Azores Oriental 1995 / UTM zone 26N",GEOGCS["Azores Oriental 1995",DATUM["Azores_Oriental_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-204.619,140.176,55.226,0,0,0,0],AUTHORITY["EPSG","6664"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4664"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3062"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3063 + +proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs +PROJCS["Azores Central 1995 / UTM zone 26N",GEOGCS["Azores Central 1995",DATUM["Azores_Central_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.226,166.366,-37.893,0,0,0,0],AUTHORITY["EPSG","6665"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4665"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3063"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3064 + +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IGM95 / UTM zone 32N",GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3064"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3065 + +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IGM95 / UTM zone 33N",GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3065"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3066 + +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / Jordan TM",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",37],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",-3000000],AUTHORITY["EPSG","3066"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3067 + +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-TM35FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3067"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3068 + +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / Soldner Berlin",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",52.41864827777778],PARAMETER["central_meridian",13.62720366666667],PARAMETER["false_easting",40000],PARAMETER["false_northing",10000],AUTHORITY["EPSG","3068"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3069 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Wisconsin Transverse Mercator",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",-4500000],AUTHORITY["EPSG","3069"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3070 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wisconsin Transverse Mercator",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3070"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3071 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Wisconsin Transverse Mercator",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3071"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3072 + +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine CS2000 East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3072"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3073 + +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine CS2000 Central (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3073"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3074 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine CS2000 West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3074"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3075 + +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine CS2000 East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3075"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3076 + +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine CS2000 Central (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3076"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3077 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine CS2000 West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3077"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3078 + +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Michigan Oblique Mercator",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3078"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3079 + +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Michigan Oblique Mercator",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3079"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3080 + +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs +PROJCS["NAD27 / Shackleford",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.41666666666667],PARAMETER["standard_parallel_2",34.91666666666666],PARAMETER["latitude_of_origin",31.16666666666667],PARAMETER["central_meridian",-100],PARAMETER["false_easting",3000000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3080"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3081 + +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas State Mapping System",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.41666666666667],PARAMETER["standard_parallel_2",34.91666666666666],PARAMETER["latitude_of_origin",31.16666666666667],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3081"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3082 + +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas Centric Lambert Conformal",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3082"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3083 + +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas Centric Albers Equal Area",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3083"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3084 + +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas Centric Lambert Conformal",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3084"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3085 + +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Texas Centric Albers Equal Area",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3085"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3086 + +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Florida GDL Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3086"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3087 + +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Florida GDL Albers",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3087"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3088 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kentucky Single Zone",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3088"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3089 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Kentucky Single Zone (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3089"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3090 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Kentucky Single Zone",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3090"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3091 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Kentucky Single Zone (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3091"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3092 + +proj=utm +zone=51 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / UTM zone 51N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3092"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3093 + +proj=utm +zone=52 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / UTM zone 52N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3093"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3094 + +proj=utm +zone=53 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / UTM zone 53N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3095 + +proj=utm +zone=54 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / UTM zone 54N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3096 + +proj=utm +zone=55 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / UTM zone 55N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3097 + +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / UTM zone 51N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3097"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3098 + +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / UTM zone 52N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3098"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3099 + +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / UTM zone 53N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3099"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3100 + +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / UTM zone 54N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3101 + +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JGD2000 / UTM zone 55N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3101"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3102 + +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs +PROJCS["American Samoa 1962 / American Samoa Lambert",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",312234.65],AUTHORITY["EPSG","3102"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3103 + +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 28N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3103"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3104 + +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 29N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3104"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3105 + +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 30N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3105"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3106 + +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs +PROJCS["Gulshan 303 / Bangladesh Transverse Mercator",GEOGCS["Gulshan 303",DATUM["Gulshan_303",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[283.7,735.9,261.1,0,0,0,0],AUTHORITY["EPSG","6682"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4682"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3106"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3107 + +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / SA Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-28],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",-32],PARAMETER["central_meridian",135],PARAMETER["false_easting",1000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3107"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3108 + +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Guernsey Grid",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.5],PARAMETER["central_meridian",-2.416666666666667],PARAMETER["scale_factor",0.999997],PARAMETER["false_easting",47000],PARAMETER["false_northing",50000],AUTHORITY["EPSG","3108"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3109 + +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Jersey Transverse Mercator",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.225],PARAMETER["central_meridian",-2.135],PARAMETER["scale_factor",0.9999999],PARAMETER["false_easting",40000],PARAMETER["false_northing",70000],AUTHORITY["EPSG","3109"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3110 + +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / Vicgrid66",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-36],PARAMETER["standard_parallel_2",-38],PARAMETER["latitude_of_origin",-37],PARAMETER["central_meridian",145],PARAMETER["false_easting",2500000],PARAMETER["false_northing",4500000],AUTHORITY["EPSG","3110"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3111 + +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / Vicgrid94",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-36],PARAMETER["standard_parallel_2",-38],PARAMETER["latitude_of_origin",-37],PARAMETER["central_meridian",145],PARAMETER["false_easting",2500000],PARAMETER["false_northing",2500000],AUTHORITY["EPSG","3111"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3112 + +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / Geoscience Australia Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",134],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3112"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3113 + +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / BCSG02",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-28],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",50000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3113"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3114 + +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["MAGNA-SIRGAS / Colombia Far West zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-80.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3114"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3115 + +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["MAGNA-SIRGAS / Colombia West zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-77.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3115"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3116 + +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["MAGNA-SIRGAS / Colombia Bogota zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-74.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3116"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3117 + +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["MAGNA-SIRGAS / Colombia East Central zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-71.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3117"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3118 + +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["MAGNA-SIRGAS / Colombia East zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-68.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3118"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3119 + +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs +PROJCS["Douala 1948 / AEF west",GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.5],PARAMETER["scale_factor",0.999],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3119"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3120 + +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Poland zone I",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",50.625],PARAMETER["central_meridian",21.08333333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4637000],PARAMETER["false_northing",5467000],AUTHORITY["EPSG","3120"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3121 + +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs +PROJCS["PRS92 / Philippines zone 1",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3121"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3122 + +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs +PROJCS["PRS92 / Philippines zone 2",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3122"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3123 + +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs +PROJCS["PRS92 / Philippines zone 3",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3123"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3124 + +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs +PROJCS["PRS92 / Philippines zone 4",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3124"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3125 + +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs +PROJCS["PRS92 / Philippines zone 5",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",125],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3125"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3126 + +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK19FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3126"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3127 + +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK20FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3127"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3128 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK21FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3128"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3129 + +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK22FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3129"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3130 + +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK23FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3130"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3131 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK24FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3131"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3132 + +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK25FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3132"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3133 + +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK26FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3133"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3134 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK27FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3134"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3135 + +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK28FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3135"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3136 + +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK29FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3136"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3137 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK30FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3137"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3138 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / ETRS-GK31FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3138"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3140 + +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs +PROJCS["Viti Levu 1912 / Viti Levu Grid",GEOGCS["Viti Levu 1912",DATUM["Viti_Levu_1912",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6752"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4752"]],UNIT["link",0.201168,AUTHORITY["EPSG","9098"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",-18],PARAMETER["central_meridian",178],PARAMETER["false_easting",544000],PARAMETER["false_northing",704000],AUTHORITY["EPSG","3140"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3141 + +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs +PROJCS["Fiji 1956 / UTM zone 60S",GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3141"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3142 + +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs +PROJCS["Fiji 1956 / UTM zone 1S",GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3142"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3143 + +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["Fiji 1986 / Fiji Map Grid (deprecated)",GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-17],PARAMETER["central_meridian",178.75],PARAMETER["scale_factor",0.99985],PARAMETER["false_easting",2000000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3143"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3146 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3146"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3147 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3147"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3148 + +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1960 / UTM zone 48N",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3149 + +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1960 / UTM zone 49N",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3150 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3150"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3151 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3151"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3152 + +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ST74",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05779],PARAMETER["scale_factor",0.99999425],PARAMETER["false_easting",100178.1808],PARAMETER["false_northing",-6500614.7836],AUTHORITY["EPSG","3152"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3153 + +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / BC Albers",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",58.5],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-126],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3153"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3154 + +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 7N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3154"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3155 + +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 8N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3155"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3156 + +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 9N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3156"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3157 + +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 10N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3157"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3158 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 14N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3158"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3159 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 15N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3159"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3160 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 16N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3160"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3161 + +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Ontario MNR Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.5],PARAMETER["standard_parallel_2",53.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-85],PARAMETER["false_easting",930000],PARAMETER["false_northing",6430000],AUTHORITY["EPSG","3161"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3162 + +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Ontario MNR Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.5],PARAMETER["standard_parallel_2",53.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-85],PARAMETER["false_easting",930000],PARAMETER["false_northing",6430000],AUTHORITY["EPSG","3162"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3163 + +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGNC91-93 / Lambert New Caledonia",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-20.66666666666667],PARAMETER["standard_parallel_2",-22.33333333333333],PARAMETER["latitude_of_origin",-21.5],PARAMETER["central_meridian",166],PARAMETER["false_easting",400000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","3163"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3164 + +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs +PROJCS["ST87 Ouvea / UTM zone 58S",GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-56.263,16.136,-22.856,0,0,0,0],AUTHORITY["EPSG","6750"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4750"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3164"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3165 + +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs +PROJCS["NEA74 Noumea / Noumea Lambert",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-22.24469175],PARAMETER["standard_parallel_2",-22.29469175],PARAMETER["latitude_of_origin",-22.26969175],PARAMETER["central_meridian",166.44242575],PARAMETER["false_easting",0.66],PARAMETER["false_northing",1.02],AUTHORITY["EPSG","3165"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3166 + +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs +PROJCS["NEA74 Noumea / Noumea Lambert 2",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-22.24472222222222],PARAMETER["standard_parallel_2",-22.29472222222222],PARAMETER["latitude_of_origin",-22.26972222222222],PARAMETER["central_meridian",166.4425],PARAMETER["false_easting",8.313],PARAMETER["false_northing",-2.354],AUTHORITY["EPSG","3166"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3167 + +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs +PROJCS["Kertau (RSO) / RSO Malaya (ch)",GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]],UNIT["British chain (Sears 1922 truncated)",20.116756,AUTHORITY["EPSG","9301"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",1988.392164223695],PARAMETER["false_northing",0],AUTHORITY["EPSG","3167"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3168 + +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs +PROJCS["Kertau (RSO) / RSO Malaya (m)",GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",804670.24],PARAMETER["false_northing",0],AUTHORITY["EPSG","3168"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3169 + +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGNC91-93 / UTM zone 57S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3169"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3170 + +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGNC91-93 / UTM zone 58S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3171 + +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGNC91-93 / UTM zone 59S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3172 + +proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs +PROJCS["IGN53 Mare / UTM zone 59S",GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3172"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3174 + +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Great Lakes Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",42.122774],PARAMETER["standard_parallel_2",49.01518],PARAMETER["latitude_of_center",45.568977],PARAMETER["longitude_of_center",-84.455955],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3174"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3175 + +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Great Lakes and St Lawrence Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",42.122774],PARAMETER["standard_parallel_2",49.01518],PARAMETER["latitude_of_center",45.568977],PARAMETER["longitude_of_center",-83.248627],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3175"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3176 + +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1960 / TM 106 NE",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3176"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3177 + +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.9965],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3177"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3178 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 18N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3178"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3179 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 19N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3179"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3180 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 20N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3180"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3181 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 21N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3181"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3182 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 22N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3182"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3183 + +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 23N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3183"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3184 + +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 24N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3184"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3185 + +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 25N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3185"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3186 + +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 26N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3186"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3187 + +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 27N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3187"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3188 + +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 28N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3189 + +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GR96 / UTM zone 29N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3190 + +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 5",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3190"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3191 + +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 6",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3191"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3192 + +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 7",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3192"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3193 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 8",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3193"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3194 + +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 9",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3194"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3195 + +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 10",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3195"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3196 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 11",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3196"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3197 + +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 12",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3197"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3198 + +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / Libya TM zone 13",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3198"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3199 + +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / UTM zone 32N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3199"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3200 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +units=m +no_defs +PROJCS["FD58 / Iraq zone",GEOGCS["FD58",DATUM["Final_Datum_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-239.1,-170.02,397.5,0,0,0,0],AUTHORITY["EPSG","6132"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4132"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","3200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3201 + +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / UTM zone 33N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3202 + +proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / UTM zone 34N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3203 + +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs +PROJCS["LGD2006 / UTM zone 35N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3204 + +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SP19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3204"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3205 + +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SP21-22",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3205"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3206 + +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SP23-24",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3206"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3207 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ01-02",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-174],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3207"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3208 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3208"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3209 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ21-22",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3209"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3210 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ37-38",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3210"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3211 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ39-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3211"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3212 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ41-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3212"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3213 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ43-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3214 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ45-46",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3215 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ47-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3216 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ49-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",114],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3217 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ51-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",126],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3218 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ53-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",138],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3218"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3219 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ55-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3220 + +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SQ57-58",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3221 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR13-14",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3222 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR15-16",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3222"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3223 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR17-18",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3223"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3224 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3224"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3225 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR27-28",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-18],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3225"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3226 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR29-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-6],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3226"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3227 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR31-32",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",6],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3227"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3228 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR33-34",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",18],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3228"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3229 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR35-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",30],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3229"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3230 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR37-38",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3230"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3231 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR39-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3232 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR41-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3233 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR43-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3233"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3234 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR45-46",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3235 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR47-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3236 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR49-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",114],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3237 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR51-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",126],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3238 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR53-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",138],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3238"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3239 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR55-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3240 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR57-58",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3241 + +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SR59-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",174],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3241"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3242 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS04-06",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-153],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3242"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3243 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS07-09",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-135],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3243"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3244 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS10-12",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-117],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3244"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3245 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS13-15",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-99],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3245"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3246 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS16-18",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-81],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3246"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3247 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS19-21",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3247"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3248 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS25-27",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-27],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3249 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS28-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-9],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3250 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS31-33",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",9],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3251 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS34-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",27],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3252 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS37-39",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",45],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3253 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS40-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",63],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3254 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS43-45",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",81],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3255 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS46-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",99],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3256 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS49-51",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",117],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3257 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS52-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",135],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3258 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS55-57",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",153],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3259 + +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SS58-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",171],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3260 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST01-04",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-168],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3261 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST05-08",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-144],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3261"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3262 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST09-12",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3262"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3263 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST13-16",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3263"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3264 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST17-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3264"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3265 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST21-24",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3265"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3266 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST25-28",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-24],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3266"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3267 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST29-32",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3267"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3268 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST33-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",24],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3268"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3269 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST37-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3269"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3270 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST41-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",72],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3270"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3271 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST45-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3271"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3272 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST49-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",120],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3272"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3273 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST53-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",144],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3273"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3274 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW ST57-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",168],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3274"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3275 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU01-05",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3275"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3276 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU06-10",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3276"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3277 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU11-15",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3277"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3278 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU16-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3278"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3279 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU21-25",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3279"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3280 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU26-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3280"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3281 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU31-35",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3281"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3282 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU36-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3282"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3283 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU41-45",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3283"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3284 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU46-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3284"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3285 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU51-55",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3285"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3286 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SU56-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3286"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3287 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV01-10",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3287"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3288 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV11-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3288"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3289 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV21-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-30],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3289"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3290 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV31-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3290"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3291 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV41-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3292 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SV51-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3293 + +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / SCAR IMW SW01-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3293"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3294 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / USGS Transantarctic Mountains",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-78],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3294"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3296 + +proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs +PROJCS["RGPF / UTM zone 5S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3296"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3297 + +proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs +PROJCS["RGPF / UTM zone 6S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3297"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3298 + +proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs +PROJCS["RGPF / UTM zone 7S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3298"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3299 + +proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs +PROJCS["RGPF / UTM zone 8S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3299"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3300 + +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs +PROJCS["Estonian Coordinate System of 1992",GEOGCS["EST92",DATUM["Estonia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014],AUTHORITY["EPSG","6133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4133"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",59.33333333333334],PARAMETER["standard_parallel_2",58],PARAMETER["latitude_of_origin",57.51755393055556],PARAMETER["central_meridian",24],PARAMETER["false_easting",500000],PARAMETER["false_northing",6375000],AUTHORITY["EPSG","3300"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3301 + +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Estonian Coordinate System of 1997",GEOGCS["EST97",DATUM["Estonia_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6180"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4180"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",59.33333333333334],PARAMETER["standard_parallel_2",58],PARAMETER["latitude_of_origin",57.51755393055556],PARAMETER["central_meridian",24],PARAMETER["false_easting",500000],PARAMETER["false_northing",6375000],AUTHORITY["EPSG","3301"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3302 + +proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs +PROJCS["IGN63 Hiva Oa / UTM zone 7S",GEOGCS["IGN63 Hiva Oa",DATUM["IGN63_Hiva_Oa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311],AUTHORITY["EPSG","6689"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4689"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3302"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3303 + +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs +PROJCS["Fatu Iva 72 / UTM zone 7S",GEOGCS["Fatu Iva 72",DATUM["Fatu_Iva_72",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074],AUTHORITY["EPSG","6688"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4688"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3303"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3304 + +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs +PROJCS["Tahiti 79 / UTM zone 6S",GEOGCS["Tahiti 79",DATUM["Tahiti_79",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6690"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4690"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3304"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3305 + +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs +PROJCS["Moorea 87 / UTM zone 6S",GEOGCS["Moorea 87",DATUM["Moorea_87",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773],AUTHORITY["EPSG","6691"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4691"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3306 + +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs +PROJCS["Maupiti 83 / UTM zone 5S",GEOGCS["Maupiti 83",DATUM["Maupiti_83",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[217.037,86.959,23.956,0,0,0,0],AUTHORITY["EPSG","6692"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4692"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3307 + +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs +PROJCS["Nakhl-e Ghanem / UTM zone 39N",GEOGCS["Nakhl-e Ghanem",DATUM["Nakhl_e_Ghanem",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,-0.15,0.68,0,0,0,0],AUTHORITY["EPSG","6693"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4693"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3307"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3308 + +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / NSW Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-30.75],PARAMETER["standard_parallel_2",-35.75],PARAMETER["latitude_of_origin",-33.25],PARAMETER["central_meridian",147],PARAMETER["false_easting",9300000],PARAMETER["false_northing",4500000],AUTHORITY["EPSG","3308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3309 + +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / California Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3309"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3310 + +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3310"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3311 + +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / California Albers",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3311"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3312 + +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs +PROJCS["CSG67 / UTM zone 21N",GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3313 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs +PROJCS["RGFG95 / UTM zone 21N",GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3314 + +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Lambert (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3315 + +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga TM (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3316 + +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["Kasai 1953 / Congo TM zone 22",GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3317 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["Kasai 1953 / Congo TM zone 24",GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3317"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3318 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 12",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3319 + +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 14",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3319"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3320 + +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 16",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3320"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3321 + +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 18",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3321"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3322 + +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 20",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3322"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3323 + +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 22",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3323"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3324 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 24",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3324"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3325 + +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 26",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3325"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3326 + +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 28",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3326"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3327 + +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs +PROJCS["IGC 1962 / Congo TM zone 30",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3327"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3328 + +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / GUGiK-80",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.16666666666666],PARAMETER["central_meridian",19.16666666666667],PARAMETER["scale_factor",0.999714],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3328"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3329 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3329"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3330 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3330"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3331 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3331"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3332 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3332"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3333 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3333"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3334 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3334"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3335 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3335"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3336 + +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs +PROJCS["IGN 1962 Kerguelen / UTM zone 42S",GEOGCS["IGN 1962 Kerguelen",DATUM["IGN_1962_Kerguelen",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6698"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4698"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3336"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3337 + +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs +PROJCS["Le Pouce 1934 / Mauritius Grid",GEOGCS["Le Pouce 1934",DATUM["Le_Pouce_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],AUTHORITY["EPSG","6699"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4699"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-20.19506944444445],PARAMETER["central_meridian",57.52182777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3337"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3338 + +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3338"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3339 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs +PROJCS["IGCB 1955 / Congo TM zone 12",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3340 + +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs +PROJCS["IGCB 1955 / Congo TM zone 14",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3341 + +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs +PROJCS["IGCB 1955 / Congo TM zone 16",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3341"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3342 + +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs +PROJCS["IGCB 1955 / UTM zone 33S",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3343 + +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 28N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3344 + +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 29N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3345 + +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mauritania 1999 / UTM zone 30N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3346 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["LKS94 / Lithuania TM",GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3346"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3347 + +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Statistics Canada Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",63.390675],PARAMETER["central_meridian",-91.86666666666666],PARAMETER["false_easting",6200000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3348 + +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Statistics Canada Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",63.390675],PARAMETER["central_meridian",-91.86666666666666],PARAMETER["false_easting",6200000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3349 + +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / PDC Mercator (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3350 + +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone C0",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",21.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3350"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3351 + +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone C1",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",24.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",1250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3351"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3352 + +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / CS63 zone C2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",27.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",2250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3352"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3353 + +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs +PROJCS["Mhast (onshore) / UTM zone 32S",GEOGCS["Mhast (onshore)",DATUM["Mhast_onshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6704"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4704"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3354 + +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs +PROJCS["Mhast (offshore) / UTM zone 32S",GEOGCS["Mhast (offshore)",DATUM["Mhast_offshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6705"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4705"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3355 + +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs +PROJCS["Egypt Gulf of Suez S-650 TL / Red Belt",GEOGCS["Egypt Gulf of Suez S-650 TL",DATUM["Egypt_Gulf_of_Suez_S_650_TL",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-146.21,112.63,4.05,0,0,0,0],AUTHORITY["EPSG","6706"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4706"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",615000],PARAMETER["false_northing",810000],AUTHORITY["EPSG","3355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3356 + +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs +PROJCS["Grand Cayman 1959 / UTM zone 17N",GEOGCS["Grand Cayman 1959",DATUM["Grand_Cayman_1959",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[67.8,106.1,138.8,0,0,0,0],AUTHORITY["EPSG","6723"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4723"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3357 + +proj=utm +zone=17 +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +units=m +no_defs +PROJCS["Little Cayman 1961 / UTM zone 17N",GEOGCS["Little Cayman 1961",DATUM["Little_Cayman_1961",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[42,124,147,0,0,0,0],AUTHORITY["EPSG","6726"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4726"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3358 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / North Carolina",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","3358"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3359 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / North Carolina (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000004.000008],PARAMETER["false_northing",0],AUTHORITY["EPSG","3359"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3360 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / South Carolina",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","3360"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3361 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(HARN) / South Carolina (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3361"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3362 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Pennsylvania North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3362"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3363 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Pennsylvania North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3363"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3364 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Pennsylvania South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3364"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3365 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Pennsylvania South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3365"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3366 + +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs +PROJCS["Hong Kong 1963 Grid System (deprecated)",GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["false_easting",40243.57775604237],PARAMETER["false_northing",19069.93351512578],AUTHORITY["EPSG","3366"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3367 + +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs +PROJCS["IGN Astro 1960 / UTM zone 28N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3367"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3368 + +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs +PROJCS["IGN Astro 1960 / UTM zone 29N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3368"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3369 + +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs +PROJCS["IGN Astro 1960 / UTM zone 30N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3369"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3370 + +proj=utm +zone=59 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 59N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3370"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3371 + +proj=utm +zone=60 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 60N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3371"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3372 + +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 59N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3372"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3373 + +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 60N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3373"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3374 + +proj=utm +zone=29 +ellps=intl +units=m +no_defs +PROJCS["FD54 / UTM zone 29N",GEOGCS["FD54",DATUM["Faroe_Datum_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6741"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4741"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3374"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3375 + +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Peninsula RSO",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257964666666],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",804671],PARAMETER["false_northing",0],AUTHORITY["EPSG","3375"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3376 + +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / East Malaysia BRSO",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31580995],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3376"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3377 + +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Johor Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",2.121679744444445],PARAMETER["central_meridian",103.4279362361111],PARAMETER["false_easting",-14810.562],PARAMETER["false_northing",8758.32],AUTHORITY["EPSG","3377"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3378 + +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Sembilan and Melaka Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",2.682347636111111],PARAMETER["central_meridian",101.9749050416667],PARAMETER["false_easting",3673.785],PARAMETER["false_northing",-4240.573],AUTHORITY["EPSG","3378"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3379 + +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / PahangGrid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",3.769388088888889],PARAMETER["central_meridian",102.3682989833333],PARAMETER["false_easting",-7368.228],PARAMETER["false_northing",6485.858],AUTHORITY["EPSG","3379"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3380 + +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Selangor Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",3.68464905],PARAMETER["central_meridian",101.3891079138889],PARAMETER["false_easting",-34836.161],PARAMETER["false_northing",56464.049],AUTHORITY["EPSG","3380"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3381 + +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Terengganu Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",4.9762852],PARAMETER["central_meridian",103.070275625],PARAMETER["false_easting",19594.245],PARAMETER["false_northing",3371.895],AUTHORITY["EPSG","3381"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3382 + +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Pinang Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.421517541666667],PARAMETER["central_meridian",100.3443769638889],PARAMETER["false_easting",-23.414],PARAMETER["false_northing",62.283],AUTHORITY["EPSG","3382"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3383 + +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Kedah and Perlis Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.964672713888889],PARAMETER["central_meridian",100.6363711111111],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3383"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3384 + +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Perak Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",4.859063022222222],PARAMETER["central_meridian",100.8154105861111],PARAMETER["false_easting",-1.769],PARAMETER["false_northing",133454.779],AUTHORITY["EPSG","3384"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3385 + +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs +PROJCS["GDM2000 / Kelantan Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.972543658333334],PARAMETER["central_meridian",102.2952416694444],PARAMETER["false_easting",13227.851],PARAMETER["false_northing",8739.894],AUTHORITY["EPSG","3385"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3386 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland zone 0",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3386"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3387 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs +PROJCS["KKJ / Finland zone 5",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3387"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3388 + +proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Caspian Sea Mercator",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",42],PARAMETER["central_meridian",51],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3388"],AXIS["none",NORTH],AXIS["none",EAST]] + + + 3389 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 60",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3389"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3390 + +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 60",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3390"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3391 + +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs +PROJCS["Karbala 1979 / UTM zone 37N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3391"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3392 + +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs +PROJCS["Karbala 1979 / UTM zone 38N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3392"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3393 + +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs +PROJCS["Karbala 1979 / UTM zone 39N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3393"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3394 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs +PROJCS["Nahrwan 1934 / Iraq zone",GEOGCS["Nahrwan 1934",DATUM["Nahrwan_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6744"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4744"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","3394"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3395 + +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / World Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3395"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3396 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["PD/83 / 3-degree Gauss-Kruger zone 3",GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3396"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3397 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["PD/83 / 3-degree Gauss-Kruger zone 4",GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3397"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3398 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RD/83 / 3-degree Gauss-Kruger zone 4",GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3398"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3399 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RD/83 / 3-degree Gauss-Kruger zone 5",GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3399"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3400 + +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 10-TM (Forest)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3400"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3401 + +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 10-TM (Resource)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3401"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3402 + +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 10-TM (Forest)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3402"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3403 + +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 10-TM (Resource)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3403"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3404 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / North Carolina (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3404"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3405 + +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs +PROJCS["VN-2000 / UTM zone 48N",GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3405"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3406 + +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs +PROJCS["VN-2000 / UTM zone 49N",GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3406"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3407 + +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs +PROJCS["Hong Kong 1963 Grid System",GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]],UNIT["Clarke's foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["false_easting",132033.92],PARAMETER["false_northing",62565.96],AUTHORITY["EPSG","3407"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3408 + +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs +PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6371228,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","3408"]] + + + 3409 + +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs +PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6371228,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",-90],PARAMETER["longitude_of_center",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","3409"]] + + + 3410 + +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs +PROJCS["NSIDC EASE-Grid Global",GEOGCS["Unspecified datum based upon the International 1924 Authalic Sphere",DATUM["Not_specified_based_on_International_1924_Authalic_Sphere",SPHEROID["International 1924 Authalic Sphere",6371228,0,AUTHORITY["EPSG","7057"]],AUTHORITY["EPSG","6053"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4053"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["standard_parallel_1",30],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3410"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3411 + +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs +PROJCS["NSIDC Sea Ice Polar Stereographic North",GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",70],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3411"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3412 + +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs +PROJCS["NSIDC Sea Ice Polar Stereographic South",GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-70],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3412"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3413 + +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / NSIDC Sea Ice Polar Stereographic North",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",70],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3413"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3414 + +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs +PROJCS["SVY21 / Singapore TM",GEOGCS["SVY21",DATUM["SVY21",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6757"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4757"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",1.366666666666667],PARAMETER["central_meridian",103.8333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",28001.642],PARAMETER["false_northing",38744.572],AUTHORITY["EPSG","3414"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3415 + +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / South China Sea Lambert",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18],PARAMETER["standard_parallel_2",24],PARAMETER["latitude_of_origin",21],PARAMETER["central_meridian",114],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3415"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3416 + +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Austria Lambert",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3416"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3417 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Iowa North (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3417"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3418 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Iowa South (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3418"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3419 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Kansas North (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3419"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3420 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Kansas South (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3420"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3421 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Nevada East (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3421"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3422 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Nevada Central (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3422"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3423 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Nevada West (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3423"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3424 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New Jersey (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3424"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3425 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Iowa North (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3425"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3426 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Iowa South (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3426"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3427 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Kansas North (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3427"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3428 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Kansas South (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3428"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3429 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Nevada East (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3429"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3430 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Nevada Central (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3430"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3431 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Nevada West (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3431"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3432 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New Jersey (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3432"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3433 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Arkansas North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3433"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3434 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Arkansas South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3434"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3435 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Illinois East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3435"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3436 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Illinois West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3436"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3437 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / New Hampshire (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3437"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3438 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Rhode Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3438"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3439 + +proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs +PROJCS["PSD93 / UTM zone 39N",GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3440 + +proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs +PROJCS["PSD93 / UTM zone 40N",GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3441 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Arkansas North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3441"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3442 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Arkansas South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3442"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3443 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Illinois East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3443"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3444 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Illinois West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3444"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3445 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / New Hampshire (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3445"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3446 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Rhode Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3446"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3447 + +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Belgian Lambert 2005",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",50.797815],PARAMETER["central_meridian",4.359215833333333],PARAMETER["false_easting",150328],PARAMETER["false_northing",166262],AUTHORITY["EPSG","3447"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3448 + +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JAD2001 / Jamaica Metric Grid",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",650000],AUTHORITY["EPSG","3448"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3449 + +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JAD2001 / UTM zone 17N",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3449"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3450 + +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["JAD2001 / UTM zone 18N",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3450"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3451 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Louisiana North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3451"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3452 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Louisiana South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3452"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3453 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Louisiana Offshore (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3453"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3454 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / South Dakota North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3454"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3455 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / South Dakota South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3455"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3456 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Louisiana North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3456"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3457 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Louisiana South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3457"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3458 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / South Dakota North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3458"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3459 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / South Dakota South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3459"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3460 + +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["Fiji 1986 / Fiji Map Grid",GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-17],PARAMETER["central_meridian",178.75],PARAMETER["scale_factor",0.99985],PARAMETER["false_easting",2000000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3460"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3461 + +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs +PROJCS["Dabola 1981 / UTM zone 28N",GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3461"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3462 + +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs +PROJCS["Dabola 1981 / UTM zone 29N",GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3462"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3463 + +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine CS2000 Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3463"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3464 + +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine CS2000 Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3464"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3465 + +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alabama East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3465"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3466 + +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alabama West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3466"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3467 + +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3467"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3468 + +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 1",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5000000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3468"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3469 + +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 2",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3469"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3470 + +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 3",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3470"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3471 + +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 4",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3471"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3472 + +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 5",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3472"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3473 + +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 6",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3473"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3474 + +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 7",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3474"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3475 + +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 8",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3475"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3476 + +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 9",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3476"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3477 + +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Alaska zone 10",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3477"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3478 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Arizona Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3478"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3479 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Arizona Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3479"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3480 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Arizona East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3480"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3481 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Arizona East (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3481"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3482 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Arizona West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3482"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3483 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Arizona West (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3483"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3484 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Arkansas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3484"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3485 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Arkansas North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3485"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3486 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Arkansas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3486"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3487 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Arkansas South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3487"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3488 + +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3488"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3489 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 1",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3489"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3490 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 1 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3490"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3491 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 2",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3491"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3492 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 2 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3492"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3493 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 3",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3493"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3494 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 3 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3494"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3495 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 4",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3495"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3496 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 4 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3496"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3497 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 5",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3497"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3498 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 5 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3498"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3499 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / California zone 6",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3499"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3500 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / California zone 6 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3500"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3501 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Colorado Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3501"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3502 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Colorado Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3502"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3503 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Colorado North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3503"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3504 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Colorado North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3504"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3505 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Colorado South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3505"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3506 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Colorado South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3506"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3507 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Connecticut",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","3507"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3508 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Connecticut (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3508"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3509 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Delaware",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3509"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3510 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Delaware (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3510"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3511 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Florida East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3511"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3512 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Florida East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3512"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3513 + +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Florida GDL Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3513"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3514 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Florida North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3514"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3515 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Florida North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3515"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3516 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Florida West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3516"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3517 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Florida West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3517"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3518 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Georgia East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3518"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3519 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Georgia East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3519"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3520 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Georgia West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3520"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3521 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Georgia West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3521"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3522 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Idaho Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3522"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3523 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Idaho Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3523"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3524 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Idaho East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3524"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3525 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Idaho East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3525"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3526 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Idaho West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3526"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3527 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Idaho West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3527"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3528 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Illinois East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3528"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3529 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Illinois East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3529"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3530 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Illinois West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3530"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3531 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Illinois West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3531"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3532 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Indiana East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","3532"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3533 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Indiana East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","3533"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3534 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Indiana West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","3534"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3535 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Indiana West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","3535"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3536 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Iowa North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3536"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3537 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Iowa North (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3537"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3538 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Iowa South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3538"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3539 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Iowa South (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3539"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3540 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Kansas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3540"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3541 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Kansas North (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3541"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3542 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Kansas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3542"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3543 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Kansas South (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3543"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3544 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3544"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3545 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3545"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3546 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky Single Zone",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3546"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3547 + +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky Single Zone (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3547"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3548 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3548"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3549 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Kentucky South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3549"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3550 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Louisiana North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3550"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3551 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Louisiana North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3551"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3552 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Louisiana South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3552"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3553 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Louisiana South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3553"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3554 + +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine CS2000 Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3554"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3555 + +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine CS2000 East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3555"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3556 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine CS2000 West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3556"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3557 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3557"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3558 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3558"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3559 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maryland",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3559"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3560 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Utah North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3560"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3561 + +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs +PROJCS["Old Hawaiian / Hawaii zone 1",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3561"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3562 + +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs +PROJCS["Old Hawaiian / Hawaii zone 2",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3562"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3563 + +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs +PROJCS["Old Hawaiian / Hawaii zone 3",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3563"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3564 + +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs +PROJCS["Old Hawaiian / Hawaii zone 4",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3564"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3565 + +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs +PROJCS["Old Hawaiian / Hawaii zone 5",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3565"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3566 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Utah Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3566"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3567 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Utah South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3567"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3568 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Utah North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3568"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3569 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Utah Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3569"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3570 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Utah South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3570"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3571 + +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Bering Sea",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",180],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3571"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3572 + +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Alaska",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3572"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3573 + +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Canada",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3573"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3574 + +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Atlantic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-40],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3574"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3575 + +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Europe",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3575"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3576 + +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / North Pole LAEA Russia",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3576"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3577 + +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / Australian Albers",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",132],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3577"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3578 + +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Yukon Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",61.66666666666666],PARAMETER["standard_parallel_2",68],PARAMETER["latitude_of_center",59],PARAMETER["longitude_of_center",-132.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3578"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3579 + +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Yukon Albers",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",61.66666666666666],PARAMETER["standard_parallel_2",68],PARAMETER["latitude_of_center",59],PARAMETER["longitude_of_center",-132.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3579"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3580 + +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / NWT Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",62],PARAMETER["standard_parallel_2",70],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-112],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3580"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3581 + +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / NWT Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",62],PARAMETER["standard_parallel_2",70],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-112],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3581"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3582 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Maryland (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3582"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3583 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Massachusetts Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3583"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3584 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Massachusetts Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3584"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3585 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Massachusetts Mainland",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","3585"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3586 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Massachusetts Mainland (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","3586"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3587 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Michigan Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3587"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3588 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Michigan Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","3588"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3589 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Michigan North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3589"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3590 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Michigan North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","3590"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3591 + +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Michigan Oblique Mercator",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3591"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3592 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Michigan South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3592"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3593 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Michigan South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","3593"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3594 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3594"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3595 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3595"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3596 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3596"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3597 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Mississippi East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3597"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3598 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Mississippi East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3598"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3599 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Mississippi West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3599"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3600 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Mississippi West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3600"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3601 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Missouri Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3601"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3602 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Missouri East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3602"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3603 + +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Missouri West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3603"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3604 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Montana",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3604"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3605 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Montana (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3605"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3606 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Nebraska",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3606"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3607 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Nevada Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3607"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3608 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Nevada Central (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3608"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3609 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Nevada East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","3609"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3610 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Nevada East (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3610"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3611 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Nevada West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3611"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3612 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Nevada West (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3612"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3613 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New Hampshire",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3613"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3614 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New Hampshire (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3614"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3615 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New Jersey",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3615"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3616 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New Jersey (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3616"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3617 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3617"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3618 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3618"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3619 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3619"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3620 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","3620"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3621 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3621"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3622 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New Mexico West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3622"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3623 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New York Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3623"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3624 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New York Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3624"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3625 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New York East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3625"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3626 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New York East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3626"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3627 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New York Long Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3627"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3628 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New York Long Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3628"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3629 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / New York West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3629"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3630 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / New York West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3630"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3631 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / North Carolina",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","3631"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3632 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / North Carolina (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3632"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3633 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / North Dakota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3633"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3634 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / North Dakota North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3634"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3635 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / North Dakota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3635"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3636 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / North Dakota South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3636"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3637 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Ohio North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3637"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3638 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Ohio South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3638"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3639 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Oklahoma North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3639"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3640 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Oklahoma North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3640"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3641 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Oklahoma South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3641"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3642 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Oklahoma South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3642"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3643 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Oregon Lambert",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3643"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3644 + +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Oregon Lambert (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","3644"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3645 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Oregon North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3645"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3646 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Oregon North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","3646"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3647 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Oregon South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3647"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3648 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Oregon South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","3648"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3649 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Pennsylvania North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3649"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3650 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Pennsylvania North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3650"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3651 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Pennsylvania South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3651"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3652 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Pennsylvania South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3652"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3653 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Rhode Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3653"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3654 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Rhode Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3654"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3655 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / South Carolina",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","3655"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3656 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / South Carolina (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3656"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3657 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / South Dakota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3657"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3658 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / South Dakota North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3658"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3659 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / South Dakota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3659"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3660 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / South Dakota South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3660"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3661 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Tennessee",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3661"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3662 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Tennessee (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3662"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3663 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3663"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3664 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Texas Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3664"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3665 + +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas Centric Albers Equal Area",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3665"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3666 + +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas Centric Lambert Conformal",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3666"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3667 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3667"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3668 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Texas North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3668"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3669 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas North Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3669"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3670 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Texas North Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","3670"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3671 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3671"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3672 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Texas South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","3672"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3673 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Texas South Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3673"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3674 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Texas South Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","3674"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3675 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Utah Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3675"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3676 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","3676"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3677 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3677"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3678 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Utah North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3678"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3679 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","3679"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3680 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3680"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3681 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Utah South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3681"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3682 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","3682"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3683 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Utah South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3683"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3684 + +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Vermont",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3684"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3685 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Virginia North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3685"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3686 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Virginia North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","3686"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3687 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Virginia South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3687"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3688 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Virginia South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3688"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3689 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Washington North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3689"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3690 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Washington North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3690"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3691 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Washington South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3691"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3692 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Washington South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3692"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3693 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3693"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3694 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3694"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3695 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3695"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3696 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3696"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3697 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3697"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3698 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3698"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3699 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3699"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3700 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3700"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3701 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wisconsin Transverse Mercator",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3701"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3702 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3702"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3703 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming East Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3703"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3704 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming West Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3704"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3705 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3705"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3706 + +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 59N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3707 + +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 60N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3708 + +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 1N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3709 + +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 2N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3710 + +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 3N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3711 + +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 4N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3712 + +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 5N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3713 + +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 6N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3714 + +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 7N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3715 + +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 8N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3716 + +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 9N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3717 + +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 10N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3718 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 11N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3719 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 12N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3720 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 13N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3721 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 14N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3722 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 15N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3723 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 16N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3723"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3724 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 17N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3724"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3725 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 18N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3725"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3726 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / UTM zone 19N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3726"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3727 + +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs +PROJCS["Reunion 1947 / TM Reunion",GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-21.11666666666667],PARAMETER["central_meridian",55.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",160000],PARAMETER["false_northing",50000],AUTHORITY["EPSG","3727"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3728 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Ohio North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3728"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3729 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Ohio South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3729"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3730 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3730"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3731 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming East Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3731"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3732 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming West Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3732"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3733 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Wyoming West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3733"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3734 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Ohio North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3734"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3735 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Ohio South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3735"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3736 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wyoming East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3736"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3737 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wyoming East Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3737"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3738 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wyoming West Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3738"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3739 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Wyoming West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3739"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3740 + +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 10N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3740"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3741 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 11N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3741"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3742 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 12N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3742"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3743 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 13N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3743"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3744 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 14N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3744"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3745 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 15N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3745"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3746 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 16N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3746"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3747 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 17N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3747"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3748 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 18N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3748"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3749 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 19N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3749"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3750 + +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 4N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3750"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3751 + +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / UTM zone 5N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3751"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3752 + +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Mercator 41 (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",100],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3752"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3753 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Ohio North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3753"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3754 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Ohio South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3754"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3755 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wyoming East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3755"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3756 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wyoming East Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3756"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3757 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wyoming West Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3757"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3758 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Wyoming West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3758"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3759 + +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Hawaii zone 3 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3759"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3760 + +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Hawaii zone 3 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3760"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3761 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / UTM zone 22N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3761"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3762 + +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / South Georgia Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-54],PARAMETER["standard_parallel_2",-54.75],PARAMETER["latitude_of_origin",-55],PARAMETER["central_meridian",-37],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3762"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3763 + +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Portugal TM06",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66825833333333],PARAMETER["central_meridian",-8.133108333333334],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3763"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3764 + +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Chatham Island Circuit 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44],PARAMETER["central_meridian",-176.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","3764"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3765 + +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["HTRS96 / Croatia TM",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3765"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3766 + +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["HTRS96 / Croatia LCC",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.91666666666666],PARAMETER["standard_parallel_2",43.08333333333334],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3766"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3767 + +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["HTRS96 / UTM zone 33N",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3767"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3768 + +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["HTRS96 / UTM zone 34N",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3768"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3769 + +proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs +PROJCS["Bermuda 1957 / UTM zone 20N",GEOGCS["Bermuda 1957",DATUM["Bermuda_1957",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-73,213,296,0,0,0,0],AUTHORITY["EPSG","6216"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4216"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3769"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3770 + +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["BDA2000 / Bermuda 2000 National Grid",GEOGCS["BDA2000",DATUM["Bermuda_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6762"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4762"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32],PARAMETER["central_meridian",-64.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",550000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3770"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3771 + +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Alberta 3TM ref merid 111 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3771"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3772 + +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Alberta 3TM ref merid 114 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3772"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3773 + +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Alberta 3TM ref merid 117 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3773"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3774 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3774"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3775 + +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 3TM ref merid 111 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3775"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3776 + +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 3TM ref merid 114 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3776"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3777 + +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 3TM ref merid 117 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3777"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3778 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3778"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3779 + +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 111 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3779"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3780 + +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 114 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3780"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3781 + +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 117 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3781"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3782 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3782"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3783 + +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Pitcairn 2006 / Pitcairn TM 2006",GEOGCS["Pitcairn 2006",DATUM["Pitcairn_2006",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6763"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4763"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-25.06855261111111],PARAMETER["central_meridian",-130.1129671111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",14200],PARAMETER["false_northing",15500],AUTHORITY["EPSG","3783"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3784 + +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs +PROJCS["Pitcairn 1967 / UTM zone 9S",GEOGCS["Pitcairn 1967",DATUM["Pitcairn_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[185,165,42,0,0,0,0],AUTHORITY["EPSG","6729"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4729"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3784"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3785 + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +PROJCS["Popular Visualisation CRS / Mercator (deprecated)",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3786 + +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs +PROJCS["World Equidistant Cylindrical (Sphere) (deprecated)",GEOGCS["Unspecified datum based upon the GRS 1980 Authalic Sphere",DATUM["Not_specified_based_on_GRS_1980_Authalic_Sphere",SPHEROID["GRS 1980 Authalic Sphere",6371007,0,AUTHORITY["EPSG","7048"]],AUTHORITY["EPSG","6047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4047"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3786"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3787 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Slovene National Grid (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3787"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 3788 + +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Auckland Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",166],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3788"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3789 + +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Campbell Island TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",169],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3789"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3790 + +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Antipodes Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",179],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3790"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3791 + +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Raoul Island TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-178],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3791"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3793 + +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / Chatham Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-176.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3793"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3794 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Slovenia 1996 / Slovene National Grid",GEOGCS["Slovenia 1996",DATUM["Slovenia_Geodetic_Datum_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6765"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4765"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3794"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3795 + +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Cuba Norte",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",23],PARAMETER["standard_parallel_2",21.7],PARAMETER["latitude_of_origin",22.35],PARAMETER["central_meridian",-81],PARAMETER["false_easting",500000],PARAMETER["false_northing",280296.016],AUTHORITY["EPSG","3795"],AXIS["Y",NORTH],AXIS["X",EAST]] + + + 3796 + +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Cuba Sur",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",21.3],PARAMETER["standard_parallel_2",20.13333333333333],PARAMETER["latitude_of_origin",20.71666666666667],PARAMETER["central_meridian",-76.83333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",229126.939],AUTHORITY["EPSG","3796"],AXIS["Y",NORTH],AXIS["X",EAST]] + + + 3797 + +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTQ Lambert",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3797"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3798 + +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTQ Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3798"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3799 + +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTQ Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3799"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3800 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Alberta 3TM ref merid 120 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3800"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3801 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alberta 3TM ref merid 120 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3801"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3802 + +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 120 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3802"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3812 + +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / Belgian Lambert 2008",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",50.797815],PARAMETER["central_meridian",4.359215833333333],PARAMETER["false_easting",649328],PARAMETER["false_northing",665262],AUTHORITY["EPSG","3812"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3814 + +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Mississippi TM",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3814"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3815 + +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Mississippi TM",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3815"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3816 + +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Mississippi TM",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3816"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3819 + +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs +GEOGCS["HD1909",DATUM["Hungarian_Datum_1909",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408],AUTHORITY["EPSG","1024"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3819"]] + + + 3821 + +proj=longlat +ellps=aust_SA +no_defs +GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]] + + + 3824 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]] + + + 3825 + +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["TWD97 / TM2 zone 119",GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3825"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3826 + +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["TWD97 / TM2 zone 121",GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3826"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3827 + +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs +PROJCS["TWD67 / TM2 zone 119",GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3827"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3828 + +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs +PROJCS["TWD67 / TM2 zone 121",GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3828"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3829 + +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs +PROJCS["Hu Tzu Shan / UTM zone 51N",GEOGCS["Hu Tzu Shan 1950",DATUM["Hu_Tzu_Shan_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-637,-549,-203,0,0,0,0],AUTHORITY["EPSG","6236"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4236"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3829"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3832 + +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / PDC Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3833 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 2",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3833"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3834 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 2",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3834"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3835 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3835"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3836 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3836"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3837 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3837"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3838 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3838"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3839 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3839"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3840 + +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3840"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3841 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3841"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3842 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3842"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3843 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3843"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3844 + +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=2.329,-147.042,-92.08,0.309,-0.325,-0.497,5.69 +units=m +no_defs +PROJCS["Pulkovo 1942(58) / Stereo70",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[2.329,-147.042,-92.08,0.309,-0.325,-0.497,5.69],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3844"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3845 + +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 7.5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30625],PARAMETER["scale_factor",1.000006],PARAMETER["false_easting",1500025.141],PARAMETER["false_northing",-667.282],AUTHORITY["EPSG","3845"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3846 + +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55626666666667],PARAMETER["scale_factor",1.0000058],PARAMETER["false_easting",1500044.695],PARAMETER["false_northing",-667.13],AUTHORITY["EPSG","3846"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3847 + +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 2.5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80628452944445],PARAMETER["scale_factor",1.00000561024],PARAMETER["false_easting",1500064.274],PARAMETER["false_northing",-667.711],AUTHORITY["EPSG","3847"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3848 + +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 0 gon emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.0563],PARAMETER["scale_factor",1.0000054],PARAMETER["false_easting",1500083.521],PARAMETER["false_northing",-668.844],AUTHORITY["EPSG","3848"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3849 + +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 2.5 gon O emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30631666666667],PARAMETER["scale_factor",1.0000052],PARAMETER["false_easting",1500102.765],PARAMETER["false_northing",-670.706],AUTHORITY["EPSG","3849"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3850 + +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SWEREF99 / RT90 5 gon O emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55633333333333],PARAMETER["scale_factor",1.0000049],PARAMETER["false_easting",1500121.846],PARAMETER["false_northing",-672.557],AUTHORITY["EPSG","3850"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3851 + +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NZGD2000 / NZCS2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-37.5],PARAMETER["standard_parallel_2",-44.5],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",173],PARAMETER["false_easting",3000000],PARAMETER["false_northing",7000000],AUTHORITY["EPSG","3851"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3852 + +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RSRGD2000 / DGLC2000",GEOGCS["RSRGD2000",DATUM["Ross_Sea_Region_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6764"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4764"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",157],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3852"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 3854 + +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["County ST74",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05787],PARAMETER["scale_factor",0.99999506],PARAMETER["false_easting",100182.7406],PARAMETER["false_northing",-6500620.1207],AUTHORITY["EPSG","3854"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 3857 + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["latitude_of_origin", 0],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3889 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]] + + + 3890 + +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IGRS / UTM zone 37N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3890"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3891 + +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IGRS / UTM zone 38N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3892 + +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["IGRS / UTM zone 39N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3893 + +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / Iraq National Grid",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.02626833333333],PARAMETER["central_meridian",46.5],PARAMETER["scale_factor",0.9994],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3906 + +proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs +GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]] + + + 3907 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Balkans zone 5",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3907"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3908 + +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Balkans zone 6",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3908"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3909 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Balkans zone 7",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3909"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3910 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Balkans zone 8",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3910"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3911 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Slovenia Grid",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3911"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 3912 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs +PROJCS["MGI 1901 / Slovene National Grid",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3912"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 3920 + +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs +PROJCS["Puerto Rico / UTM zone 20N",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3920"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3942 + +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC42",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.25],PARAMETER["standard_parallel_2",42.75],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","3942"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3943 + +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC43",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.25],PARAMETER["standard_parallel_2",43.75],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","3943"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3944 + +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC44",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.25],PARAMETER["standard_parallel_2",44.75],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","3944"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3945 + +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC45",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.25],PARAMETER["standard_parallel_2",45.75],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",4200000],AUTHORITY["EPSG","3945"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3946 + +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC46",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.25],PARAMETER["standard_parallel_2",46.75],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",5200000],AUTHORITY["EPSG","3946"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3947 + +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC47",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.25],PARAMETER["standard_parallel_2",47.75],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",6200000],AUTHORITY["EPSG","3947"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3948 + +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC48",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.25],PARAMETER["standard_parallel_2",48.75],PARAMETER["latitude_of_origin",48],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",7200000],AUTHORITY["EPSG","3948"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3949 + +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],AUTHORITY["EPSG","3949"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3950 + +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGF93 / CC50",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.25],PARAMETER["standard_parallel_2",50.75],PARAMETER["latitude_of_origin",50],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",9200000],AUTHORITY["EPSG","3950"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3968 + +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Virginia Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3968"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3969 + +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Virginia Lambert",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3969"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3970 + +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Virginia Lambert",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3970"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3975 + +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / NSIDC EASE-Grid Global",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["standard_parallel_1",30],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3975"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3976 + +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / NSIDC Sea Ice Polar Stereographic South",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-70],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3976"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3978 + +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Canada Atlas Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-95],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3979 + +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / Canada Atlas Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-95],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 3985 + +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Lambert (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",9],PARAMETER["central_meridian",26],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3985"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3986 + +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Gauss zone A",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3986"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3987 + +proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Gauss zone B",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3987"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3988 + +proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Gauss zone C",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3988"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3989 + +proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Gauss zone D",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3989"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3991 + +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs +PROJCS["Puerto Rico State Plane CS of 1927",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3991"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3992 + +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs +PROJCS["Puerto Rico / St. Croix",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",500000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3992"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3994 + +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Mercator 41",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",-41],PARAMETER["central_meridian",100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3994"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3995 + +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Arctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",71],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3995"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3996 + +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / IBCAO Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",75],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3996"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 3997 + +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Dubai Local TM",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",55.33333333333334],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4001 + +proj=longlat +ellps=airy +no_defs +GEOGCS["Unknown datum based upon the Airy 1830 ellipsoid",DATUM["Not_specified_based_on_Airy_1830_ellipsoid",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6001"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4001"]] + + + 4002 + +proj=longlat +ellps=mod_airy +no_defs +GEOGCS["Unknown datum based upon the Airy Modified 1849 ellipsoid",DATUM["Not_specified_based_on_Airy_Modified_1849_ellipsoid",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],AUTHORITY["EPSG","6002"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4002"]] + + + 4003 + +proj=longlat +ellps=aust_SA +no_defs +GEOGCS["Unknown datum based upon the Australian National Spheroid",DATUM["Not_specified_based_on_Australian_National_Spheroid",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],AUTHORITY["EPSG","6003"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4003"]] + + + 4004 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Unknown datum based upon the Bessel 1841 ellipsoid",DATUM["Not_specified_based_on_Bessel_1841_ellipsoid",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6004"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4004"]] + + + 4005 + +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs +GEOGCS["Unknown datum based upon the Bessel Modified ellipsoid",DATUM["Not_specified_based_on_Bessel_Modified_ellipsoid",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],AUTHORITY["EPSG","6005"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4005"]] + + + 4006 + +proj=longlat +ellps=bess_nam +no_defs +GEOGCS["Unknown datum based upon the Bessel Namibia ellipsoid",DATUM["Not_specified_based_on_Bessel_Namibia_ellipsoid",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],AUTHORITY["EPSG","6006"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4006"]] + + + 4007 + +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1858 ellipsoid",DATUM["Not_specified_based_on_Clarke_1858_ellipsoid",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6007"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4007"]] + + + 4008 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1866 ellipsoid",DATUM["Not_specified_based_on_Clarke_1866_ellipsoid",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6008"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4008"]] + + + 4009 + +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1866 Michigan ellipsoid",DATUM["Not_specified_based_on_Clarke_1866_Michigan_ellipsoid",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6009"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4009"]] + + + 4010 + +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_Benoit_ellipsoid",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],AUTHORITY["EPSG","6010"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4010"]] + + + 4011 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 (IGN) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_IGN_ellipsoid",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6011"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4011"]] + + + 4012 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 (RGS) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_RGS_ellipsoid",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6012"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4012"]] + + + 4013 + +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 (Arc) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_Arc_ellipsoid",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],AUTHORITY["EPSG","6013"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4013"]] + + + 4014 + +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_SGA_1922_ellipsoid",SPHEROID["Clarke 1880 (SGA 1922)",6378249.2,293.46598,AUTHORITY["EPSG","7014"]],AUTHORITY["EPSG","6014"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4014"]] + + + 4015 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs +GEOGCS["Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1937_Adjustment_ellipsoid",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],AUTHORITY["EPSG","6015"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4015"]] + + + 4016 + +proj=longlat +ellps=evrstSS +no_defs +GEOGCS["Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1967_Definition_ellipsoid",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],AUTHORITY["EPSG","6016"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4016"]] + + + 4018 + +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs +GEOGCS["Unknown datum based upon the Everest 1830 Modified ellipsoid",DATUM["Not_specified_based_on_Everest_1830_Modified_ellipsoid",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],AUTHORITY["EPSG","6018"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4018"]] + + + 4019 + +proj=longlat +ellps=GRS80 +no_defs +GEOGCS["Unknown datum based upon the GRS 1980 ellipsoid",DATUM["Not_specified_based_on_GRS_1980_ellipsoid",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6019"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4019"]] + + + 4020 + +proj=longlat +ellps=helmert +no_defs +GEOGCS["Unknown datum based upon the Helmert 1906 ellipsoid",DATUM["Not_specified_based_on_Helmert_1906_ellipsoid",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6020"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4020"]] + + + 4021 + +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs +GEOGCS["Unknown datum based upon the Indonesian National Spheroid",DATUM["Not_specified_based_on_Indonesian_National_Spheroid",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],AUTHORITY["EPSG","6021"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4021"]] + + + 4022 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Unknown datum based upon the International 1924 ellipsoid",DATUM["Not_specified_based_on_International_1924_ellipsoid",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6022"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4022"]] + + + 4023 + +proj=longlat +ellps=GRS80 +no_defs +GEOGCS["MOLDREF99",DATUM["MOLDREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4023"]] + + + 4024 + +proj=longlat +ellps=krass +no_defs +GEOGCS["Unknown datum based upon the Krassowsky 1940 ellipsoid",DATUM["Not_specified_based_on_Krassowsky_1940_ellipsoid",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6024"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4024"]] + + + 4025 + +proj=longlat +ellps=WGS66 +no_defs +GEOGCS["Unknown datum based upon the NWL 9D ellipsoid",DATUM["Not_specified_based_on_NWL_9D_ellipsoid",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4025"]] + + + 4026 + +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs +PROJCS["MOLDREF99 / Moldova TM",GEOGCS["MOLDREF99",DATUM["MOLDREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4023"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28.4],PARAMETER["scale_factor",0.99994],PARAMETER["false_easting",200000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4026"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4027 + +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs +GEOGCS["Unknown datum based upon the Plessis 1817 ellipsoid",DATUM["Not_specified_based_on_Plessis_1817_ellipsoid",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6027"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4027"]] + + + 4028 + +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs +GEOGCS["Unknown datum based upon the Struve 1860 ellipsoid",DATUM["Not_specified_based_on_Struve_1860_ellipsoid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6028"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4028"]] + + + 4029 + +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs +GEOGCS["Unknown datum based upon the War Office ellipsoid",DATUM["Not_specified_based_on_War_Office_ellipsoid",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4029"]] + + + 4030 + +proj=longlat +ellps=WGS84 +no_defs +GEOGCS["Unknown datum based upon the WGS 84 ellipsoid",DATUM["Not_specified_based_on_WGS_84_ellipsoid",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6030"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4030"]] + + + 4031 + +proj=longlat +ellps=WGS84 +no_defs +GEOGCS["Unknown datum based upon the GEM 10C ellipsoid",DATUM["Not_specified_based_on_GEM_10C_ellipsoid",SPHEROID["GEM 10C",6378137,298.257223563,AUTHORITY["EPSG","7031"]],AUTHORITY["EPSG","6031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4031"]] + + + 4032 + +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs +GEOGCS["Unknown datum based upon the OSU86F ellipsoid",DATUM["Not_specified_based_on_OSU86F_ellipsoid",SPHEROID["OSU86F",6378136.2,298.257223563,AUTHORITY["EPSG","7032"]],AUTHORITY["EPSG","6032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4032"]] + + + 4033 + +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs +GEOGCS["Unknown datum based upon the OSU91A ellipsoid",DATUM["Not_specified_based_on_OSU91A_ellipsoid",SPHEROID["OSU91A",6378136.3,298.257223563,AUTHORITY["EPSG","7033"]],AUTHORITY["EPSG","6033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4033"]] + + + 4034 + +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs +GEOGCS["Unknown datum based upon the Clarke 1880 ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_ellipsoid",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6034"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4034"]] + + + 4035 + +proj=longlat +a=6371000 +b=6371000 +no_defs +GEOGCS["Unknown datum based upon the Authalic Sphere",DATUM["Not_specified_based_on_Authalic_Sphere",SPHEROID["Sphere",6371000,0,AUTHORITY["EPSG","7035"]],AUTHORITY["EPSG","6035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4035"]] + + + 4036 + +proj=longlat +ellps=GRS67 +no_defs +GEOGCS["Unknown datum based upon the GRS 1967 ellipsoid",DATUM["Not_specified_based_on_GRS_1967_ellipsoid",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],AUTHORITY["EPSG","6036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4036"]] + + + 4037 + +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TMzn35N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4037"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 4038 + +proj=utm +zone=36 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TMzn36N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4038"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 4041 + +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs +GEOGCS["Unknown datum based upon the Average Terrestrial System 1977 ellipsoid",DATUM["Not_specified_based_on_Average_Terrestrial_System_1977_ellipsoid",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6041"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4041"]] + + + 4042 + +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs +GEOGCS["Unknown datum based upon the Everest (1830 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_Definition_ellipsoid",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4042"]] + + + 4043 + +proj=longlat +ellps=WGS72 +no_defs +GEOGCS["Unknown datum based upon the WGS 72 ellipsoid",DATUM["Not_specified_based_on_WGS_72_ellipsoid",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],AUTHORITY["EPSG","6043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4043"]] + + + 4044 + +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs +GEOGCS["Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1962_Definition_ellipsoid",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],AUTHORITY["EPSG","6044"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4044"]] + + + 4045 + +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs +GEOGCS["Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1975_Definition_ellipsoid",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],AUTHORITY["EPSG","6045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4045"]] + + + 4046 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]] + + + 4047 + +proj=longlat +a=6371007 +b=6371007 +no_defs +GEOGCS["Unspecified datum based upon the GRS 1980 Authalic Sphere",DATUM["Not_specified_based_on_GRS_1980_Authalic_Sphere",SPHEROID["GRS 1980 Authalic Sphere",6371007,0,AUTHORITY["EPSG","7048"]],AUTHORITY["EPSG","6047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4047"]] + + + 4048 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 12",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4048"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4049 + +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 14",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4049"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4050 + +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 16",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4050"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4051 + +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 18",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4051"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4052 + +proj=longlat +a=6370997 +b=6370997 +no_defs +GEOGCS["Unspecified datum based upon the Clarke 1866 Authalic Sphere",DATUM["Not_specified_based_on_Clarke_1866_Authalic_Sphere",SPHEROID["Clarke 1866 Authalic Sphere",6370997,0,AUTHORITY["EPSG","7052"]],AUTHORITY["EPSG","6052"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4052"]] + + + 4053 + +proj=longlat +a=6371228 +b=6371228 +no_defs +GEOGCS["Unspecified datum based upon the International 1924 Authalic Sphere",DATUM["Not_specified_based_on_International_1924_Authalic_Sphere",SPHEROID["International 1924 Authalic Sphere",6371228,0,AUTHORITY["EPSG","7057"]],AUTHORITY["EPSG","6053"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4053"]] + + + 4054 + +proj=longlat +a=6378273 +b=6356889.449 +no_defs +GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]] + + + 4055 + +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]] + + + 4056 + +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 20",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4056"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4057 + +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 22",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4057"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4058 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 24",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4058"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4059 + +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 26",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4059"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4060 + +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / Congo TM zone 28",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4060"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4061 + +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / UTM zone 33S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4061"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4062 + +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / UTM zone 34S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4062"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4063 + +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGRDC 2005 / UTM zone 35S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4063"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4071 + +proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs +PROJCS["Chua / UTM zone 23S",GEOGCS["Chua",DATUM["Chua",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-134,229,-29,0,0,0,0],AUTHORITY["EPSG","6224"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4224"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4071"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4075 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["SREF98",DATUM["Serbian_Reference_Network_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1034"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4075"]] + + + 4081 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]] + + + 4082 + +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["REGCAN95 / UTM zone 27N",GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4082"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4083 + +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["REGCAN95 / UTM zone 28N",GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4083"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4093 + +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / DKTM1",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",200000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4093"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4094 + +proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / DKTM2",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",400000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4095 + +proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / DKTM3",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.75],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",600000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4096 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / DKTM4",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",800000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4120 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Greek",DATUM["Greek",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6120"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4120"]] + + + 4121 + +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs +GEOGCS["GGRS87",DATUM["Greek_Geodetic_Reference_System_1987",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY["EPSG","6121"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4121"]] + + + 4122 + +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs +GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]] + + + 4123 + +proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs +GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]] + + + 4124 + +proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs +GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]] + + + 4125 + +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs +GEOGCS["Samboja",DATUM["Samboja",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY["EPSG","6125"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4125"]] + + + 4126 + +proj=longlat +ellps=GRS80 +no_defs +GEOGCS["LKS94 (ETRS89)",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4126"]] + + + 4127 + +proj=longlat +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +no_defs +GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]] + + + 4128 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["Madzansua",DATUM["Madzansua",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6128"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4128"]] + + + 4129 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["Observatario",DATUM["Observatario",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6129"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4129"]] + + + 4130 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs +GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]] + + + 4131 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs +GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]] + + + 4132 + +proj=longlat +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +no_defs +GEOGCS["FD58",DATUM["Final_Datum_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-239.1,-170.02,397.5,0,0,0,0],AUTHORITY["EPSG","6132"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4132"]] + + + 4133 + +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs +GEOGCS["EST92",DATUM["Estonia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014],AUTHORITY["EPSG","6133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4133"]] + + + 4134 + +proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs +GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]] + + + 4135 + +proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs +GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]] + + + 4136 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["St. Lawrence Island",DATUM["St_Lawrence_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6136"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4136"]] + + + 4137 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["St. Paul Island",DATUM["St_Paul_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6137"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4137"]] + + + 4138 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["St. George Island",DATUM["St_George_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6138"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4138"]] + + + 4139 + +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs +GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]] + + + 4140 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]] + + + 4141 + +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs +GEOGCS["Israel",DATUM["Israel",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-48,55,52,0,0,0,0],AUTHORITY["EPSG","6141"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4141"]] + + + 4142 + +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs +GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]] + + + 4143 + +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs +GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]] + + + 4144 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +no_defs +GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]] + + + 4145 + +proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs +GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]] + + + 4146 + +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs +GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]] + + + 4147 + +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs +GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]] + + + 4148 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]] + + + 4149 + +proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs +GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]] + + + 4150 + +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs +GEOGCS["CH1903+",DATUM["CH1903+",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY["EPSG","6150"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4150"]] + + + 4151 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["CHTRF95",DATUM["Swiss_Terrestrial_Reference_Frame_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6151"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4151"]] + + + 4152 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]] + + + 4153 + +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs +GEOGCS["Rassadiran",DATUM["Rassadiran",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0],AUTHORITY["EPSG","6153"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4153"]] + + + 4154 + +proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs +GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]] + + + 4155 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs +GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]] + + + 4156 + +proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs +GEOGCS["S-JTSK",DATUM["Jednotne_Trigonometricke_Site_Katastralni",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6156"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4156"]] + + + 4157 + +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs +GEOGCS["Mount Dillon",DATUM["Mount_Dillon",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6157"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4157"]] + + + 4158 + +proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs +GEOGCS["Naparima 1955",DATUM["Naparima_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-0.465,372.095,171.736,0,0,0,0],AUTHORITY["EPSG","6158"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4158"]] + + + 4159 + +proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs +GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]] + + + 4160 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Chos Malal 1914",DATUM["Chos_Malal_1914",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6160"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4160"]] + + + 4161 + +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs +GEOGCS["Pampa del Castillo",DATUM["Pampa_del_Castillo",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTHORITY["EPSG","6161"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4161"]] + + + 4162 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]] + + + 4163 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]] + + + 4164 + +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs +GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]] + + + 4165 + +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs +GEOGCS["Bissau",DATUM["Bissau",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-173,253,27,0,0,0,0],AUTHORITY["EPSG","6165"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4165"]] + + + 4166 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Korean 1995",DATUM["Korean_Datum_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6166"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4166"]] + + + 4167 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]] + + + 4168 + +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs +GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]] + + + 4169 + +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs +GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]] + + + 4170 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]] + + + 4171 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]] + + + 4172 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["POSGAR",DATUM["Posiciones_Geodesicas_Argentinas",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6172"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4172"]] + + + 4173 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]] + + + 4174 + +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs +GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]] + + + 4175 + +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs +GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]] + + + 4176 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Australian Antarctic",DATUM["Australian_Antarctic_Datum_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6176"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4176"]] + + + 4178 + +proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs +GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]] + + + 4179 + +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs +GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]] + + + 4180 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["EST97",DATUM["Estonia_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6180"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4180"]] + + + 4181 + +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs +GEOGCS["Luxembourg 1930",DATUM["Luxembourg_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-193,13.7,-39.3,-0.41,-2.933,2.688,0.43],AUTHORITY["EPSG","6181"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4181"]] + + + 4182 + +proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs +GEOGCS["Azores Occidental 1939",DATUM["Azores_Occidental_Islands_1939",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-425,-169,81,0,0,0,0],AUTHORITY["EPSG","6182"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4182"]] + + + 4183 + +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs +GEOGCS["Azores Central 1948",DATUM["Azores_Central_Islands_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,167,-38,0,0,0,0],AUTHORITY["EPSG","6183"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4183"]] + + + 4184 + +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs +GEOGCS["Azores Oriental 1940",DATUM["Azores_Oriental_Islands_1940",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-203,141,53,0,0,0,0],AUTHORITY["EPSG","6184"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4184"]] + + + 4185 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Madeira 1936",DATUM["Madeira_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6185"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4185"]] + + + 4188 + +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs +GEOGCS["OSNI 1952",DATUM["OSNI_1952",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6188"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4188"]] + + + 4189 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]] + + + 4190 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]] + + + 4191 + +proj=longlat +ellps=krass +no_defs +GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]] + + + 4192 + +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs +GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]] + + + 4193 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs +GEOGCS["Manoca 1962",DATUM["Manoca_1962",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6193"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4193"]] + + + 4194 + +proj=longlat +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +no_defs +GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]] + + + 4195 + +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs +GEOGCS["Scoresbysund 1952",DATUM["Scoresbysund_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[105,326,-102.5,0,0,0.814,-0.6],AUTHORITY["EPSG","6195"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4195"]] + + + 4196 + +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs +GEOGCS["Ammassalik 1958",DATUM["Ammassalik_1958",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-45,417,-3.5,0,0,0.814,-0.6],AUTHORITY["EPSG","6196"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4196"]] + + + 4197 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6197"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4197"]] + + + 4198 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Kousseri",DATUM["Kousseri",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6198"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4198"]] + + + 4199 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Egypt 1930",DATUM["Egypt_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6199"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4199"]] + + + 4200 + +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs +GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]] + + + 4201 + +proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs +GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]] + + + 4202 + +proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs +GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]] + + + 4203 + +proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs +GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]] + + + 4204 + +proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs +GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]] + + + 4205 + +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs +GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]] + + + 4206 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Agadez",DATUM["Agadez",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6206"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4206"]] + + + 4207 + +proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs +GEOGCS["Lisbon",DATUM["Lisbon_1937",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6207"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4207"]] + + + 4208 + +proj=longlat +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +no_defs +GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]] + + + 4209 + +proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs +GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]] + + + 4210 + +proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs +GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]] + + + 4211 + +proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs +GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]] + + + 4212 + +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs +GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]] + + + 4213 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs +GEOGCS["Beduaram",DATUM["Beduaram",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-106,-87,188,0,0,0,0],AUTHORITY["EPSG","6213"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4213"]] + + + 4214 + +proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs +GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]] + + + 4215 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Belge 1950",DATUM["Reseau_National_Belge_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6215"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4215"]] + + + 4216 + +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs +GEOGCS["Bermuda 1957",DATUM["Bermuda_1957",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-73,213,296,0,0,0,0],AUTHORITY["EPSG","6216"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4216"]] + + + 4218 + +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs +GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]] + + + 4219 + +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs +GEOGCS["Bukit Rimpah",DATUM["Bukit_Rimpah",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-384,664,-48,0,0,0,0],AUTHORITY["EPSG","6219"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4219"]] + + + 4220 + +proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs +GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]] + + + 4221 + +proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs +GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]] + + + 4222 + +proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs +GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]] + + + 4223 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs +GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]] + + + 4224 + +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs +GEOGCS["Chua",DATUM["Chua",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-134,229,-29,0,0,0,0],AUTHORITY["EPSG","6224"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4224"]] + + + 4225 + +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs +GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]] + + + 4226 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Cote d'Ivoire",DATUM["Cote_d_Ivoire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6226"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4226"]] + + + 4227 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs +GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]] + + + 4228 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Douala",DATUM["Douala",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6228"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4228"]] + + + 4229 + +proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs +GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]] + + + 4230 + +proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs +GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]] + + + 4231 + +proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs +GEOGCS["ED87",DATUM["European_Datum_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218],AUTHORITY["EPSG","6231"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4231"]] + + + 4232 + +proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs +GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]] + + + 4233 + +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs +GEOGCS["Gandajika 1970",DATUM["Gandajika_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY["EPSG","6233"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4233"]] + + + 4234 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6234"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4234"]] + + + 4235 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Guyane Francaise",DATUM["Guyane_Francaise",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6235"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4235"]] + + + 4236 + +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs +GEOGCS["Hu Tzu Shan 1950",DATUM["Hu_Tzu_Shan_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-637,-549,-203,0,0,0,0],AUTHORITY["EPSG","6236"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4236"]] + + + 4237 + +proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs +GEOGCS["HD72",DATUM["Hungarian_Datum_1972",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[52.17,-71.82,-14.9,0,0,0,0],AUTHORITY["EPSG","6237"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4237"]] + + + 4238 + +proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs +GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]] + + + 4239 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs +GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]] + + + 4240 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs +GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]] + + + 4241 + +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs +GEOGCS["Jamaica 1875",DATUM["Jamaica_1875",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6241"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4241"]] + + + 4242 + +proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs +GEOGCS["JAD69",DATUM["Jamaica_1969",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[70,207,389.5,0,0,0,0],AUTHORITY["EPSG","6242"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4242"]] + + + 4243 + +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs +GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]] + + + 4244 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs +GEOGCS["Kandawala",DATUM["Kandawala",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[-97,787,86,0,0,0,0],AUTHORITY["EPSG","6244"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4244"]] + + + 4245 + +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs +GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]] + + + 4246 + +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs +GEOGCS["KOC",DATUM["Kuwait_Oil_Company",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-294.7,-200.1,525.5,0,0,0,0],AUTHORITY["EPSG","6246"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4246"]] + + + 4247 + +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs +GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]] + + + 4248 + +proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs +GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]] + + + 4249 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]] + + + 4250 + +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs +GEOGCS["Leigon",DATUM["Leigon",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-130,29,364,0,0,0,0],AUTHORITY["EPSG","6250"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4250"]] + + + 4251 + +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs +GEOGCS["Liberia 1964",DATUM["Liberia_1964",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-90,40,88,0,0,0,0],AUTHORITY["EPSG","6251"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4251"]] + + + 4252 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Lome",DATUM["Lome",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6252"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4252"]] + + + 4253 + +proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs +GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]] + + + 4254 + +proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs +GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]] + + + 4255 + +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs +GEOGCS["Herat North",DATUM["Herat_North",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-333,-222,114,0,0,0,0],AUTHORITY["EPSG","6255"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4255"]] + + + 4256 + +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs +GEOGCS["Mahe 1971",DATUM["Mahe_1971",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[41,-220,-134,0,0,0,0],AUTHORITY["EPSG","6256"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4256"]] + + + 4257 + +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs +GEOGCS["Makassar",DATUM["Makassar",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6257"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4257"]] + + + 4258 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]] + + + 4259 + +proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs +GEOGCS["Malongo 1987",DATUM["Malongo_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-254.1,-5.36,-100.29,0,0,0,0],AUTHORITY["EPSG","6259"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4259"]] + + + 4260 + +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs +GEOGCS["Manoca",DATUM["Manoca",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6260"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4260"]] + + + 4261 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs +GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]] + + + 4262 + +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs +GEOGCS["Massawa",DATUM["Massawa",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[639,405,60,0,0,0,0],AUTHORITY["EPSG","6262"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4262"]] + + + 4263 + +proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs +GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]] + + + 4264 + +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs +GEOGCS["Mhast",DATUM["Mhast",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-252.95,-4.11,-96.38,0,0,0,0],AUTHORITY["EPSG","6264"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4264"]] + + + 4265 + +proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs +GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]] + + + 4266 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs +GEOGCS["M'poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]] + + + 4267 + +proj=longlat +datum=NAD27 +no_defs +GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]] + + + 4268 + +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs +GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]] + + + 4269 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]] + + + 4270 + +proj=longlat +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +no_defs +GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]] + + + 4271 + +proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs +GEOGCS["Naparima 1972",DATUM["Naparima_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10,375,165,0,0,0,0],AUTHORITY["EPSG","6271"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4271"]] + + + 4272 + +proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +no_defs +GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]] + + + 4273 + +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs +GEOGCS["NGO 1948",DATUM["NGO_1948",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6273"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4273"]] + + + 4274 + +proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs +GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]] + + + 4275 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs +GEOGCS["NTF",DATUM["Nouvelle_Triangulation_Francaise",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6275"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4275"]] + + + 4276 + +proj=longlat +ellps=WGS66 +no_defs +GEOGCS["NSWC 9Z-2",DATUM["NSWC_9Z_2",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6276"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4276"]] + + + 4277 + +proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs +GEOGCS["OSGB 1936",DATUM["OSGB_1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[446.448,-125.157,542.06,0.15,0.247,0.842,-20.489],AUTHORITY["EPSG","6277"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4277"]] + + + 4278 + +proj=longlat +ellps=airy +no_defs +GEOGCS["OSGB70",DATUM["OSGB_1970_SN",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6278"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4278"]] + + + 4279 + +proj=longlat +ellps=airy +no_defs +GEOGCS["OS(SN)80",DATUM["OS_SN_1980",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6279"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4279"]] + + + 4280 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Padang",DATUM["Padang_1884",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6280"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4280"]] + + + 4281 + +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs +GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]] + + + 4282 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs +GEOGCS["Pointe Noire",DATUM["Congo_1960_Pointe_Noire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-148,51,-291,0,0,0,0],AUTHORITY["EPSG","6282"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4282"]] + + + 4283 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]] + + + 4284 + +proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs +GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]] + + + 4285 + +proj=longlat +ellps=intl +towgs84=-128,-283,22,0,0,0,0 +no_defs +GEOGCS["Qatar 1974",DATUM["Qatar_1974",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-128,-283,22,0,0,0,0],AUTHORITY["EPSG","6285"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4285"]] + + + 4286 + +proj=longlat +ellps=helmert +no_defs +GEOGCS["Qatar 1948",DATUM["Qatar_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6286"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4286"]] + + + 4287 + +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs +GEOGCS["Qornoq",DATUM["Qornoq",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[164,138,-189,0,0,0,0],AUTHORITY["EPSG","6287"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4287"]] + + + 4288 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Loma Quintana",DATUM["Loma_Quintana",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6288"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4288"]] + + + 4289 + +proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs +GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]] + + + 4291 + +proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs +GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]] + + + 4292 + +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs +GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]] + + + 4293 + +proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs +GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]] + + + 4294 + +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs +GEOGCS["Segora",DATUM["Segora",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6294"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4294"]] + + + 4295 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Serindung",DATUM["Serindung",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6295"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4295"]] + + + 4296 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]] + + + 4297 + +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs +GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]] + + + 4298 + +proj=longlat +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +no_defs +GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]] + + + 4299 + +proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs +GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]] + + + 4300 + +proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs +GEOGCS["TM75",DATUM["Geodetic_Datum_of_1965",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6300"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4300"]] + + + 4301 + +proj=longlat +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +no_defs +GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]] + + + 4302 + +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs +GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]] + + + 4303 + +proj=longlat +ellps=helmert +no_defs +GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]] + + + 4304 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs +GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]] + + + 4306 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["Bern 1938",DATUM["Bern_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6306"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4306"]] + + + 4307 + +proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +no_defs +GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]] + + + 4308 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]] + + + 4309 + +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs +GEOGCS["Yacare",DATUM["Yacare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-155,171,37,0,0,0,0],AUTHORITY["EPSG","6309"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4309"]] + + + 4310 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Yoff",DATUM["Yoff",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6310"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4310"]] + + + 4311 + +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs +GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]] + + + 4312 + +proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs +GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]] + + + 4313 + +proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,1.2747 +no_defs +GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]] + + + 4314 + +proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs +GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]] + + + 4315 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs +GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]] + + + 4316 + +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs +GEOGCS["Dealul Piscului 1930",DATUM["Dealul_Piscului_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[103.25,-100.4,-307.19,0,0,0,0],AUTHORITY["EPSG","6316"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4316"]] + + + 4317 + +proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs +GEOGCS["Dealul Piscului 1970",DATUM["Dealul_Piscului_1970",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[28,-121,-77,0,0,0,0],AUTHORITY["EPSG","6317"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4317"]] + + + 4318 + +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs +GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]] + + + 4319 + +proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs +GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]] + + + 4322 + +proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs +GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]] + + + 4324 + +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs +GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]] + + + 4326 + +proj=longlat +datum=WGS84 +no_defs +GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]] + + + 4414 + +proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Guam Map Grid",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",13.5],PARAMETER["central_meridian",144.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",100000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","4414"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4415 + +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs +PROJCS["Katanga 1955 / Katanga Lambert",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","4415"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4417 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4417"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4434 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs +PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4434"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4437 + +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Puerto Rico and Virgin Is.",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","4437"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4455 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Pennsylvania South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4455"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4456 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New York Long Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-74],PARAMETER["false_easting",2000000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","4456"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4457 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / South Dakota North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","4457"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 4462 + +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Australian Centre for Remote Sensing Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",-27],PARAMETER["central_meridian",132],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","4462"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4463 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGSPM06",DATUM["Reseau_Geodesique_de_Saint_Pierre_et_Miquelon_2006",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1038"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4463"]] + + + 4467 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGSPM06 / UTM zone 21N",GEOGCS["RGSPM06",DATUM["Reseau_Geodesique_de_Saint_Pierre_et_Miquelon_2006",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1038"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4463"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4467"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4470 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGM04",DATUM["Reseau_Geodesique_de_Mayotte_2004",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4470"]] + + + 4471 + +proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RGM04 / UTM zone 38S",GEOGCS["RGM04",DATUM["Reseau_Geodesique_de_Mayotte_2004",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4470"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4471"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4474 + +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs +PROJCS["Cadastre 1997 / UTM zone 38S",GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4474"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4475 + +proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs +GEOGCS["Cadastre 1997",DATUM["Cadastre_1997",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-381.788,-57.501,-256.673,0,0,0,0],AUTHORITY["EPSG","1037"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4475"]] + + + 4483 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]] + + + 4484 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 11N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4484"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4485 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 12N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4485"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4486 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 13N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4486"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4487 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 14N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4487"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4488 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 15N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4488"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4489 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["Mexican Datum of 1993 / UTM zone 16N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4489"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4490 + +proj=longlat +ellps=GRS80 +no_defs +GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]] + + + 4491 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 13",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4491"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4492 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 14",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4492"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4493 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 15",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4493"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4494 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 16",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4494"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4495 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 17",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4495"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4496 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 18",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4496"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4497 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 19",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4497"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4498 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 20",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4498"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4499 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 21",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4499"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4500 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 22",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4500"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4501 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger zone 23",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4501"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4502 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 75E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4502"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4503 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 81E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4503"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4504 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 87E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4504"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4505 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 93E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4505"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4506 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 99E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4506"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4507 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 105E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4507"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4508 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 111E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4508"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4509 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 117E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4509"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4510 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 123E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4510"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4511 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 129E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4511"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4512 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / Gauss-Kruger CM 135E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4512"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4513 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 25",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4513"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4514 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 26",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4514"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4515 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 27",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4515"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4516 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 28",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4516"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4517 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 29",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4517"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4518 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 30",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4518"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4519 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 31",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4519"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4520 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 32",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4520"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4521 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 33",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4521"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4522 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 34",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4522"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4523 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 35",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4523"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4524 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 36",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4524"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4525 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 37",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4525"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4526 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 38",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4526"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4527 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 39",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4527"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4528 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 40",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4528"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4529 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 41",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4529"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4530 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 42",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4530"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4531 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 43",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4531"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4532 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 44",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4532"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4533 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 45",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4533"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4534 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 75E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4534"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4535 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 78E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4535"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4536 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 81E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4536"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4537 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 84E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4537"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4538 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 87E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4538"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4539 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 90E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4539"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4540 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 93E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4540"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4541 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 96E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4541"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4542 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 99E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4542"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4543 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 102E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4543"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4544 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 105E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4544"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4545 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 108E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4545"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4546 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 111E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4546"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4547 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 114E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4547"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4548 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 117E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4548"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4549 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 120E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4549"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4550 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 123E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4550"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4551 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 126E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4551"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4552 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 129E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4552"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4553 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 132E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4553"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4554 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 135E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4554"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4555 + +proj=longlat +ellps=krass +no_defs +GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]] + + + 4558 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4558"]] + + + 4559 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["RRAF 1991 / UTM zone 20N",GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4558"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4559"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4568 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 13",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4568"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4569 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 14",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4569"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4570 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 15",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4570"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4571 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 16",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4571"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4572 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 17",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4572"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4573 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 18",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4573"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4574 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 19",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4574"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4575 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 20",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4575"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4576 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 21",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4576"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4577 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 22",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4577"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4578 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger zone 23",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4578"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4579 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 75E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4579"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4580 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 81E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4580"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4581 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 87E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4581"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4582 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 93E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4582"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4583 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 99E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4583"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4584 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 105E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4584"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4585 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 111E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4585"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4586 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 117E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4586"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4587 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 123E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4587"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4588 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 129E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4588"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4589 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / Gauss-Kruger CM 135E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4589"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4600 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Anguilla 1957",DATUM["Anguilla_1957",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6600"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4600"]] + + + 4601 + +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs +GEOGCS["Antigua 1943",DATUM["Antigua_1943",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-255,-15,71,0,0,0,0],AUTHORITY["EPSG","6601"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4601"]] + + + 4602 + +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs +GEOGCS["Dominica 1945",DATUM["Dominica_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY["EPSG","6602"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4602"]] + + + 4603 + +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs +GEOGCS["Grenada 1953",DATUM["Grenada_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY["EPSG","6603"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4603"]] + + + 4604 + +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs +GEOGCS["Montserrat 1958",DATUM["Montserrat_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[174,359,365,0,0,0,0],AUTHORITY["EPSG","6604"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4604"]] + + + 4605 + +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs +GEOGCS["St. Kitts 1955",DATUM["St_Kitts_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[9,183,236,0,0,0,0],AUTHORITY["EPSG","6605"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4605"]] + + + 4606 + +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs +GEOGCS["St. Lucia 1955",DATUM["St_Lucia_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORITY["EPSG","6606"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4606"]] + + + 4607 + +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs +GEOGCS["St. Vincent 1945",DATUM["St_Vincent_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[195.671,332.517,274.607,0,0,0,0],AUTHORITY["EPSG","6607"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4607"]] + + + 4608 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]] + + + 4609 + +proj=longlat +ellps=clrk66 +no_defs +GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]] + + + 4610 + +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs +GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]] + + + 4611 + +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs +GEOGCS["Hong Kong 1980",DATUM["Hong_Kong_1980",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425],AUTHORITY["EPSG","6611"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4611"]] + + + 4612 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]] + + + 4613 + +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs +GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]] + + + 4614 + +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs +GEOGCS["QND95",DATUM["Qatar_National_Datum_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706],AUTHORITY["EPSG","6614"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4614"]] + + + 4615 + +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs +GEOGCS["Porto Santo",DATUM["Porto_Santo_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-499,-249,314,0,0,0,0],AUTHORITY["EPSG","6615"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4615"]] + + + 4616 + +proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs +GEOGCS["Selvagem Grande",DATUM["Selvagem_Grande",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-289,-124,60,0,0,0,0],AUTHORITY["EPSG","6616"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4616"]] + + + 4617 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]] + + + 4618 + +proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs +GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]] + + + 4619 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]] + + + 4620 + +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs +GEOGCS["Point 58",DATUM["Point_58",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-106,-129,165,0,0,0,0],AUTHORITY["EPSG","6620"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4620"]] + + + 4621 + +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs +GEOGCS["Fort Marigot",DATUM["Fort_Marigot",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[137,248,-430,0,0,0,0],AUTHORITY["EPSG","6621"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4621"]] + + + 4622 + +proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs +GEOGCS["Guadeloupe 1948",DATUM["Guadeloupe_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-467,-16,-300,0,0,0,0],AUTHORITY["EPSG","6622"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4622"]] + + + 4623 + +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs +GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]] + + + 4624 + +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs +GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]] + + + 4625 + +proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs +GEOGCS["Martinique 1938",DATUM["Martinique_1938",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[186,482,151,0,0,0,0],AUTHORITY["EPSG","6625"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4625"]] + + + 4626 + +proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs +GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]] + + + 4627 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGR92",DATUM["Reseau_Geodesique_de_la_Reunion_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6627"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4627"]] + + + 4628 + +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs +GEOGCS["Tahiti 52",DATUM["Tahiti_52",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[162,117,154,0,0,0,0],AUTHORITY["EPSG","6628"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4628"]] + + + 4629 + +proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs +GEOGCS["Tahaa 54",DATUM["Tahaa_54",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746],AUTHORITY["EPSG","6629"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4629"]] + + + 4630 + +proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs +GEOGCS["IGN72 Nuku Hiva",DATUM["IGN72_Nuku_Hiva",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[84,274,65,0,0,0,0],AUTHORITY["EPSG","6630"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4630"]] + + + 4631 + +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs +GEOGCS["K0 1949",DATUM["K0_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6631"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4631"]] + + + 4632 + +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs +GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]] + + + 4633 + +proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs +GEOGCS["IGN56 Lifou",DATUM["IGN56_Lifou",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[335.47,222.58,-230.94,0,0,0,0],AUTHORITY["EPSG","6633"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4633"]] + + + 4634 + +proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs +GEOGCS["IGN72 Grand Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4634"]] + + + 4635 + +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs +GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798],AUTHORITY["EPSG","6635"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4635"]] + + + 4636 + +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs +GEOGCS["Petrels 1972",DATUM["Petrels_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[365,194,166,0,0,0,0],AUTHORITY["EPSG","6636"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4636"]] + + + 4637 + +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs +GEOGCS["Perroud 1950",DATUM["Pointe_Geologie_Perroud_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[325,154,172,0,0,0,0],AUTHORITY["EPSG","6637"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4637"]] + + + 4638 + +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs +GEOGCS["Saint Pierre et Miquelon 1950",DATUM["Saint_Pierre_et_Miquelon_1950",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[30,430,368,0,0,0,0],AUTHORITY["EPSG","6638"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4638"]] + + + 4639 + +proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs +GEOGCS["MOP78",DATUM["MOP78",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[253,-132,-127,0,0,0,0],AUTHORITY["EPSG","6639"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4639"]] + + + 4640 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6640"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4640"]] + + + 4641 + +proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs +GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]] + + + 4642 + +proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs +GEOGCS["ST84 Ile des Pins",DATUM["ST84_Ile_des_Pins",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6642"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4642"]] + + + 4643 + +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs +GEOGCS["ST71 Belep",DATUM["ST71_Belep",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7],AUTHORITY["EPSG","6643"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4643"]] + + + 4644 + +proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs +GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]] + + + 4645 + +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGNC 1991",DATUM["Reseau_Geodesique_Nouvelle_Caledonie_1991",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6645"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4645"]] + + + 4646 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Grand Comoros",DATUM["Grand_Comoros",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6646"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4646"]] + + + 4647 + +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone N32",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4647"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 4652 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 25",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4652"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4653 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 26",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4653"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4654 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 27",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4654"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4655 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 28",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4655"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4656 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 29",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4656"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4657 + +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs +GEOGCS["Reykjavik 1900",DATUM["Reykjavik_1900",SPHEROID["Danish 1876",6377019.27,300,AUTHORITY["EPSG","7051"]],TOWGS84[-28,199,5,0,0,0,0],AUTHORITY["EPSG","6657"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4657"]] + + + 4658 + +proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs +GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]] + + + 4659 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["ISN93",DATUM["Islands_Network_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6659"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4659"]] + + + 4660 + +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs +GEOGCS["Helle 1954",DATUM["Helle_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805],AUTHORITY["EPSG","6660"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4660"]] + + + 4661 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["LKS92",DATUM["Latvia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6661"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4661"]] + + + 4662 + +proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs +GEOGCS["IGN72 Grande Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-11.64,-348.6,291.98,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4662"]] + + + 4663 + +proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs +GEOGCS["Porto Santo 1995",DATUM["Porto_Santo_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-502.862,-247.438,312.724,0,0,0,0],AUTHORITY["EPSG","6663"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4663"]] + + + 4664 + +proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs +GEOGCS["Azores Oriental 1995",DATUM["Azores_Oriental_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-204.619,140.176,55.226,0,0,0,0],AUTHORITY["EPSG","6664"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4664"]] + + + 4665 + +proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs +GEOGCS["Azores Central 1995",DATUM["Azores_Central_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.226,166.366,-37.893,0,0,0,0],AUTHORITY["EPSG","6665"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4665"]] + + + 4666 + +proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs +GEOGCS["Lisbon 1890",DATUM["Lisbon_1890",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[508.088,-191.042,565.223,0,0,0,0],AUTHORITY["EPSG","6666"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4666"]] + + + 4667 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["IKBD-92",DATUM["Iraq_Kuwait_Boundary_Datum_1992",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6667"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4667"]] + + + 4668 + +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs +GEOGCS["ED79",DATUM["European_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-86,-98,-119,0,0,0,0],AUTHORITY["EPSG","6668"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4668"]] + + + 4669 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]] + + + 4670 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]] + + + 4671 + +proj=longlat +a=6378249.2 +b=6356515 +no_defs +GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]] + + + 4672 + +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs +GEOGCS["Chatham Islands 1971",DATUM["Chatham_Islands_Datum_1971",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[175,-38,113,0,0,0,0],AUTHORITY["EPSG","6672"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4672"]] + + + 4673 + +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs +GEOGCS["Chatham Islands 1979",DATUM["Chatham_Islands_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[174.05,-25.49,112.57,-0,-0,0.554,0.2263],AUTHORITY["EPSG","6673"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4673"]] + + + 4674 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]] + + + 4675 + +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs +GEOGCS["Guam 1963",DATUM["Guam_1963",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-100,-248,259,0,0,0,0],AUTHORITY["EPSG","6675"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4675"]] + + + 4676 + +proj=longlat +ellps=krass +no_defs +GEOGCS["Vientiane 1982",DATUM["Vientiane_1982",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6676"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4676"]] + + + 4677 + +proj=longlat +ellps=krass +no_defs +GEOGCS["Lao 1993",DATUM["Lao_1993",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6677"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4677"]] + + + 4678 + +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs +GEOGCS["Lao 1997",DATUM["Lao_National_Datum_1997",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[44.585,-131.212,-39.544,0,0,0,0],AUTHORITY["EPSG","6678"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4678"]] + + + 4679 + +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs +GEOGCS["Jouik 1961",DATUM["Jouik_1961",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-80.01,253.26,291.19,0,0,0,0],AUTHORITY["EPSG","6679"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4679"]] + + + 4680 + +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs +GEOGCS["Nouakchott 1965",DATUM["Nouakchott_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[124.5,-63.5,-281,0,0,0,0],AUTHORITY["EPSG","6680"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4680"]] + + + 4681 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]] + + + 4682 + +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs +GEOGCS["Gulshan 303",DATUM["Gulshan_303",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[283.7,735.9,261.1,0,0,0,0],AUTHORITY["EPSG","6682"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4682"]] + + + 4683 + +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs +GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]] + + + 4684 + +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs +GEOGCS["Gan 1970",DATUM["Gan_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY["EPSG","6684"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4684"]] + + + 4685 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Gandajika",DATUM["Gandajika",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6685"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4685"]] + + + 4686 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]] + + + 4687 + +proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs +GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]] + + + 4688 + +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs +GEOGCS["Fatu Iva 72",DATUM["Fatu_Iva_72",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074],AUTHORITY["EPSG","6688"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4688"]] + + + 4689 + +proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs +GEOGCS["IGN63 Hiva Oa",DATUM["IGN63_Hiva_Oa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311],AUTHORITY["EPSG","6689"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4689"]] + + + 4690 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Tahiti 79",DATUM["Tahiti_79",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6690"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4690"]] + + + 4691 + +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs +GEOGCS["Moorea 87",DATUM["Moorea_87",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773],AUTHORITY["EPSG","6691"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4691"]] + + + 4692 + +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs +GEOGCS["Maupiti 83",DATUM["Maupiti_83",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[217.037,86.959,23.956,0,0,0,0],AUTHORITY["EPSG","6692"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4692"]] + + + 4693 + +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs +GEOGCS["Nakhl-e Ghanem",DATUM["Nakhl_e_Ghanem",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,-0.15,0.68,0,0,0,0],AUTHORITY["EPSG","6693"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4693"]] + + + 4694 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]] + + + 4695 + +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs +GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]] + + + 4696 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]] + + + 4697 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]] + + + 4698 + +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs +GEOGCS["IGN 1962 Kerguelen",DATUM["IGN_1962_Kerguelen",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6698"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4698"]] + + + 4699 + +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs +GEOGCS["Le Pouce 1934",DATUM["Le_Pouce_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],AUTHORITY["EPSG","6699"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4699"]] + + + 4700 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]] + + + 4701 + +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs +GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]] + + + 4702 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]] + + + 4703 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Mhast 1951",DATUM["Missao_Hidrografico_Angola_y_Sao_Tome_1951",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6703"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4703"]] + + + 4704 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Mhast (onshore)",DATUM["Mhast_onshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6704"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4704"]] + + + 4705 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Mhast (offshore)",DATUM["Mhast_offshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6705"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4705"]] + + + 4706 + +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs +GEOGCS["Egypt Gulf of Suez S-650 TL",DATUM["Egypt_Gulf_of_Suez_S_650_TL",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-146.21,112.63,4.05,0,0,0,0],AUTHORITY["EPSG","6706"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4706"]] + + + 4707 + +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs +GEOGCS["Tern Island 1961",DATUM["Tern_Island_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[114,-116,-333,0,0,0,0],AUTHORITY["EPSG","6707"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4707"]] + + + 4708 + +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs +GEOGCS["Cocos Islands 1965",DATUM["Cocos_Islands_1965",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-491,-22,435,0,0,0,0],AUTHORITY["EPSG","6708"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4708"]] + + + 4709 + +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs +GEOGCS["Iwo Jima 1945",DATUM["Iwo_Jima_1945",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,75,-272,0,0,0,0],AUTHORITY["EPSG","6709"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4709"]] + + + 4710 + +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs +GEOGCS["St. Helena 1971",DATUM["St_Helena_1971",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-320,550,-494,0,0,0,0],AUTHORITY["EPSG","6710"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4710"]] + + + 4711 + +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs +GEOGCS["Marcus Island 1952",DATUM["Marcus_Island_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[124,-234,-25,0,0,0,0],AUTHORITY["EPSG","6711"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4711"]] + + + 4712 + +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs +GEOGCS["Ascension Island 1958",DATUM["Ascension_Island_1958",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-205,107,53,0,0,0,0],AUTHORITY["EPSG","6712"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4712"]] + + + 4713 + +proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs +GEOGCS["Ayabelle Lighthouse",DATUM["Ayabelle_Lighthouse",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79,-129,145,0,0,0,0],AUTHORITY["EPSG","6713"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4713"]] + + + 4714 + +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs +GEOGCS["Bellevue",DATUM["Bellevue",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-127,-769,472,0,0,0,0],AUTHORITY["EPSG","6714"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4714"]] + + + 4715 + +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs +GEOGCS["Camp Area Astro",DATUM["Camp_Area_Astro",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,-129,239,0,0,0,0],AUTHORITY["EPSG","6715"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4715"]] + + + 4716 + +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs +GEOGCS["Phoenix Islands 1966",DATUM["Phoenix_Islands_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[298,-304,-375,0,0,0,0],AUTHORITY["EPSG","6716"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4716"]] + + + 4717 + +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs +GEOGCS["Cape Canaveral",DATUM["Cape_Canaveral",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-2,151,181,0,0,0,0],AUTHORITY["EPSG","6717"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4717"]] + + + 4718 + +proj=longlat +ellps=intl +towgs84=252,-209,-751,0,0,0,0 +no_defs +GEOGCS["Solomon 1968",DATUM["Solomon_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[252,-209,-751,0,0,0,0],AUTHORITY["EPSG","6718"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4718"]] + + + 4719 + +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs +GEOGCS["Easter Island 1967",DATUM["Easter_Island_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[211,147,111,0,0,0,0],AUTHORITY["EPSG","6719"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4719"]] + + + 4720 + +proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs +GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]] + + + 4721 + +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs +GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]] + + + 4722 + +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs +GEOGCS["South Georgia 1968",DATUM["South_Georgia_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-794,119,-298,0,0,0,0],AUTHORITY["EPSG","6722"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4722"]] + + + 4723 + +proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs +GEOGCS["Grand Cayman 1959",DATUM["Grand_Cayman_1959",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[67.8,106.1,138.8,0,0,0,0],AUTHORITY["EPSG","6723"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4723"]] + + + 4724 + +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs +GEOGCS["Diego Garcia 1969",DATUM["Diego_Garcia_1969",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[208,-435,-229,0,0,0,0],AUTHORITY["EPSG","6724"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4724"]] + + + 4725 + +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs +GEOGCS["Johnston Island 1961",DATUM["Johnston_Island_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[189,-79,-202,0,0,0,0],AUTHORITY["EPSG","6725"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4725"]] + + + 4726 + +proj=longlat +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +no_defs +GEOGCS["Little Cayman 1961",DATUM["Little_Cayman_1961",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[42,124,147,0,0,0,0],AUTHORITY["EPSG","6726"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4726"]] + + + 4727 + +proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs +GEOGCS["Midway 1961",DATUM["Midway_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[403,-81,277,0,0,0,0],AUTHORITY["EPSG","6727"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4727"]] + + + 4728 + +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs +GEOGCS["Pico de las Nieves 1984",DATUM["Pico_de_las_Nieves_1984",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-307,-92,127,0,0,0,0],AUTHORITY["EPSG","6728"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4728"]] + + + 4729 + +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs +GEOGCS["Pitcairn 1967",DATUM["Pitcairn_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[185,165,42,0,0,0,0],AUTHORITY["EPSG","6729"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4729"]] + + + 4730 + +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs +GEOGCS["Santo 1965",DATUM["Santo_1965",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[170,42,84,0,0,0,0],AUTHORITY["EPSG","6730"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4730"]] + + + 4731 + +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs +GEOGCS["Viti Levu 1916",DATUM["Viti_Levu_1916",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6731"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4731"]] + + + 4732 + +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs +GEOGCS["Marshall Islands 1960",DATUM["Marshall_Islands_1960",SPHEROID["Hough 1960",6378270,297,AUTHORITY["EPSG","7053"]],TOWGS84[102,52,-38,0,0,0,0],AUTHORITY["EPSG","6732"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4732"]] + + + 4733 + +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs +GEOGCS["Wake Island 1952",DATUM["Wake_Island_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[276,-57,149,0,0,0,0],AUTHORITY["EPSG","6733"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4733"]] + + + 4734 + +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs +GEOGCS["Tristan 1968",DATUM["Tristan_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-632,438,-609,0,0,0,0],AUTHORITY["EPSG","6734"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4734"]] + + + 4735 + +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs +GEOGCS["Kusaie 1951",DATUM["Kusaie_1951",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[647,1777,-1124,0,0,0,0],AUTHORITY["EPSG","6735"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4735"]] + + + 4736 + +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs +GEOGCS["Deception Island",DATUM["Deception_Island",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[260,12,-147,0,0,0,0],AUTHORITY["EPSG","6736"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4736"]] + + + 4737 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Korea 2000",DATUM["Geocentric_datum_of_Korea",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6737"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4737"]] + + + 4738 + +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs +GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]] + + + 4739 + +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs +GEOGCS["Hong Kong 1963(67)",DATUM["Hong_Kong_1963_67",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-156,-271,-189,0,0,0,0],AUTHORITY["EPSG","6739"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4739"]] + + + 4740 + +proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs +GEOGCS["PZ-90",DATUM["Parametrop_Zemp_1990",SPHEROID["PZ-90",6378136,298.257839303,AUTHORITY["EPSG","7054"]],TOWGS84[0,0,1.5,-0,-0,0.076,0],AUTHORITY["EPSG","6740"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4740"]] + + + 4741 + +proj=longlat +ellps=intl +no_defs +GEOGCS["FD54",DATUM["Faroe_Datum_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6741"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4741"]] + + + 4742 + +proj=longlat +ellps=GRS80 +no_defs +GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]] + + + 4743 + +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs +GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]] + + + 4744 + +proj=longlat +ellps=clrk80 +no_defs +GEOGCS["Nahrwan 1934",DATUM["Nahrwan_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6744"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4744"]] + + + 4745 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]] + + + 4746 + +proj=longlat +ellps=bessel +no_defs +GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]] + + + 4747 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]] + + + 4748 + +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs +GEOGCS["Vanua Levu 1915",DATUM["Vanua_Levu_1915",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6748"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4748"]] + + + 4749 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]] + + + 4750 + +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs +GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-56.263,16.136,-22.856,0,0,0,0],AUTHORITY["EPSG","6750"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4750"]] + + + 4751 + +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs +GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]] + + + 4752 + +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs +GEOGCS["Viti Levu 1912",DATUM["Viti_Levu_1912",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6752"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4752"]] + + + 4753 + +proj=longlat +ellps=intl +no_defs +GEOGCS["fk89",DATUM["fk89",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6753"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4753"]] + + + 4754 + +proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs +GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]] + + + 4755 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]] + + + 4756 + +proj=longlat +ellps=WGS84 +no_defs +GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]] + + + 4757 + +proj=longlat +ellps=WGS84 +no_defs +GEOGCS["SVY21",DATUM["SVY21",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6757"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4757"]] + + + 4758 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]] + + + 4759 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]] + + + 4760 + +proj=longlat +ellps=WGS66 +no_defs +GEOGCS["WGS 66",DATUM["World_Geodetic_System_1966",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6760"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4760"]] + + + 4761 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]] + + + 4762 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["BDA2000",DATUM["Bermuda_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6762"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4762"]] + + + 4763 + +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Pitcairn 2006",DATUM["Pitcairn_2006",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6763"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4763"]] + + + 4764 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["RSRGD2000",DATUM["Ross_Sea_Region_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6764"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4764"]] + + + 4765 + +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +GEOGCS["Slovenia 1996",DATUM["Slovenia_Geodetic_Datum_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6765"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4765"]] + + + 4766 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 30",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4766"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4767 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 31",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4767"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4768 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 32",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4768"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4769 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 33",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4769"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4770 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 34",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4770"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4771 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 35",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4771"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4772 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 36",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4772"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4773 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 37",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4773"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4774 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 38",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4774"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4775 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 39",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4775"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4776 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 40",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4776"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4777 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 41",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4777"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4778 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 42",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4778"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4779 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 43",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4779"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4780 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 44",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4780"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4781 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger zone 45",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4781"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4782 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 75E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4782"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4783 + +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 78E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4783"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4784 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 81E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4784"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4785 + +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 84E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4785"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4786 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 87E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4786"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4787 + +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 90E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4787"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4788 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 93E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4788"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4789 + +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 96E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4789"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4790 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 99E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4790"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4791 + +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 102E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4791"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4792 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 105E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4792"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4793 + +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 108E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4793"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4794 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 111E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4794"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4795 + +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 114E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4795"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4796 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 117E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4796"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4797 + +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 120E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4797"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4798 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 123E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4798"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4799 + +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 126E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4799"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4800 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 129E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4800"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4801 + +proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs +GEOGCS["Bern 1898 (Bern)",DATUM["CH1903_Bern",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6801"]],PRIMEM["Bern",7.439583333333333,AUTHORITY["EPSG","8907"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4801"]] + + + 4802 + +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs +GEOGCS["Bogota 1975 (Bogota)",DATUM["Bogota_1975_Bogota",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6802"]],PRIMEM["Bogota",-74.08091666666667,AUTHORITY["EPSG","8904"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4802"]] + + + 4803 + +proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs +GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]] + + + 4804 + +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs +GEOGCS["Makassar (Jakarta)",DATUM["Makassar_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6804"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4804"]] + + + 4805 + +proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs +GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]] + + + 4806 + +proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs +GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]] + + + 4807 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs +GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]] + + + 4808 + +proj=longlat +ellps=bessel +pm=jakarta +no_defs +GEOGCS["Padang (Jakarta)",DATUM["Padang_1884_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6808"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4808"]] + + + 4809 + +proj=longlat +ellps=intl +pm=brussels +no_defs +GEOGCS["Belge 1950 (Brussels)",DATUM["Reseau_National_Belge_1950_Brussels",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6809"]],PRIMEM["Brussels",4.367975,AUTHORITY["EPSG","8910"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4809"]] + + + 4810 + +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs +GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]] + + + 4811 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs +GEOGCS["Voirol 1875 (Paris)",DATUM["Voirol_1875_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6811"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4811"]] + + + 4812 + +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 132E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4812"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4813 + +proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs +GEOGCS["Batavia (Jakarta)",DATUM["Batavia_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6813"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4813"]] + + + 4814 + +proj=longlat +ellps=bessel +pm=stockholm +no_defs +GEOGCS["RT38 (Stockholm)",DATUM["Stockholm_1938_Stockholm",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6814"]],PRIMEM["Stockholm",18.05827777777778,AUTHORITY["EPSG","8911"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4814"]] + + + 4815 + +proj=longlat +ellps=bessel +pm=athens +no_defs +GEOGCS["Greek (Athens)",DATUM["Greek_Athens",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6815"]],PRIMEM["Athens",23.7163375,AUTHORITY["EPSG","8912"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4815"]] + + + 4816 + +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs +GEOGCS["Carthage (Paris)",DATUM["Carthage_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6816"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4816"]] + + + 4817 + +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs +GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]] + + + 4818 + +proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs +GEOGCS["S-JTSK (Ferro)",DATUM["S_JTSK_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6818"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4818"]] + + + 4819 + +proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +pm=paris +no_defs +GEOGCS["Nord Sahara 1959 (Paris)",DATUM["Nord_Sahara_1959_Paris",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6819"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4819"]] + + + 4820 + +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs +GEOGCS["Segara (Jakarta)",DATUM["Gunung_Segara_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6820"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4820"]] + + + 4821 + +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs +GEOGCS["Voirol 1879 (Paris)",DATUM["Voirol_1879_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6821"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4821"]] + + + 4822 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs +PROJCS["New Beijing / 3-degree Gauss-Kruger CM 135E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4822"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 4823 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Sao Tome",DATUM["Sao_Tome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","1044"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4823"]] + + + 4824 + +proj=longlat +ellps=intl +no_defs +GEOGCS["Principe",DATUM["Principe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","1046"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4824"]] + + + 4826 + +proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Cape Verde National",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",15],PARAMETER["standard_parallel_2",16.66666666666667],PARAMETER["latitude_of_origin",15.83333333333333],PARAMETER["central_meridian",-24],PARAMETER["false_easting",161587.83],PARAMETER["false_northing",128511.202],AUTHORITY["EPSG","4826"],AXIS["M",EAST],AXIS["P",NORTH]] + + + 4901 + +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs +GEOGCS["ATF (Paris)",DATUM["Ancienne_Triangulation_Francaise_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6901"]],PRIMEM["Paris RGS",2.337208333333333,AUTHORITY["EPSG","8914"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4901"]] + + + 4902 + +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs +GEOGCS["NDG (Paris)",DATUM["Nord_de_Guerre_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6902"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4902"]] + + + 4903 + +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs +GEOGCS["Madrid 1870 (Madrid)",DATUM["Madrid_1870_Madrid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6903"]],PRIMEM["Madrid",-3.687938888888889,AUTHORITY["EPSG","8905"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4903"]] + + + 4904 + +proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs +GEOGCS["Lisbon 1890 (Lisbon)",DATUM["Lisbon_1890_Lisbon",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[508.088,-191.042,565.223,0,0,0,0],AUTHORITY["EPSG","6904"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4904"]] + + + 20004 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20004"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20005 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20005"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20006 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 6",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20006"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20007 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 7",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20007"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20008 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 8",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20008"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20009 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 9",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20009"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20010 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 10",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20010"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20011 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 11",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20011"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20012 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 12",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20012"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20013 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 13",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20013"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20014 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 14",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20014"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20015 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 15",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20015"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20016 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 16",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20016"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20017 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 17",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20017"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20018 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 18",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20018"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20019 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 19",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20019"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20020 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 20",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20020"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20021 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 21",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20021"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20022 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 22",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20022"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20023 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 23",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20023"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20024 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 24",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20024"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20025 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 25",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20025"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20026 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 26",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20026"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20027 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 27",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20027"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20028 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 28",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20028"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20029 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 29",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20029"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20030 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 30",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20030"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20031 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 31",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20031"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20032 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger zone 32",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20032"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20064 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 4N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20064"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20065 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 5N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20065"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20066 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 6N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20066"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20067 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 7N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20067"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20068 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 8N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20068"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20069 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 9N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20069"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20070 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 10N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20070"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20071 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 11N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20071"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20072 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 12N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20072"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20073 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 13N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20073"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20074 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 14N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20074"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20075 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 15N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20075"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20076 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 16N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20076"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20077 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 17N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20077"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20078 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 18N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20078"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20079 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 19N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20079"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20080 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 20N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20080"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20081 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 21N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20081"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20082 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 22N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20082"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20083 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 23N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20083"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20084 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 24N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20084"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20085 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 25N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20085"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20086 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 26N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20086"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20087 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 27N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20087"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20088 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 28N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20088"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20089 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 29N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20089"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20090 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 30N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20090"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20091 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 31N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20091"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20092 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1995 / Gauss-Kruger 32N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20092"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 20135 + +proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs +PROJCS["Adindan / UTM zone 35N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20135"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20136 + +proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs +PROJCS["Adindan / UTM zone 36N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20136"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20137 + +proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs +PROJCS["Adindan / UTM zone 37N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20137"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20138 + +proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs +PROJCS["Adindan / UTM zone 38N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20138"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20248 + +proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 48",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20249 + +proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 49",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20250 + +proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 50",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20251 + +proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 51",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20252 + +proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 52",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20253 + +proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 53",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20254 + +proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 54",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20255 + +proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 55",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20256 + +proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 56",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20257 + +proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 57",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20258 + +proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs +PROJCS["AGD66 / AMG zone 58",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20348 + +proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 48",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20349 + +proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 49",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20350 + +proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 50",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20351 + +proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 51",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20352 + +proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 52",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20353 + +proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 53",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20354 + +proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 54",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20355 + +proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 55",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20356 + +proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 56",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20357 + +proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 57",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20358 + +proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs +PROJCS["AGD84 / AMG zone 58",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20436 + +proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / UTM zone 36N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20436"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20437 + +proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / UTM zone 37N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20437"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20438 + +proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / UTM zone 38N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20438"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20439 + +proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / UTM zone 39N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20440 + +proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / UTM zone 40N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20499 + +proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs +PROJCS["Ain el Abd / Bahrain Grid",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20499"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20538 + +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs +PROJCS["Afgooye / UTM zone 38N",GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20538"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20539 + +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs +PROJCS["Afgooye / UTM zone 39N",GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20539"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20790 + +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs +PROJCS["Lisbon (Lisbon) / Portuguese National Grid",GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",1],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","20790"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 20791 + +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs +PROJCS["Lisbon (Lisbon) / Portuguese Grid",GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",1],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","20791"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 20822 + +proj=utm +zone=22 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs +PROJCS["Aratu / UTM zone 22S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20822"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20823 + +proj=utm +zone=23 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs +PROJCS["Aratu / UTM zone 23S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20823"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20824 + +proj=utm +zone=24 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs +PROJCS["Aratu / UTM zone 24S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20824"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20934 + +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1950 / UTM zone 34S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20934"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20935 + +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1950 / UTM zone 35S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20935"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 20936 + +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1950 / UTM zone 36S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20936"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21035 + +proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 35S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21036 + +proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 36S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21037 + +proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 37S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21095 + +proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 35N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21096 + +proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 36N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21097 + +proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs +PROJCS["Arc 1960 / UTM zone 37N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21097"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21100 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs +PROJCS["Batavia (Jakarta) / NEIEZ (deprecated)",GEOGCS["Batavia (Jakarta)",DATUM["Batavia_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6813"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4813"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","21100"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21148 + +proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs +PROJCS["Batavia / UTM zone 48S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21149 + +proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs +PROJCS["Batavia / UTM zone 49S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21150 + +proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs +PROJCS["Batavia / UTM zone 50S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21150"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21291 + +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs +PROJCS["Barbados 1938 / British West Indies Grid",GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21292 + +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs +PROJCS["Barbados 1938 / Barbados National Grid",GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",13.17638888888889],PARAMETER["central_meridian",-59.55972222222222],PARAMETER["scale_factor",0.9999986],PARAMETER["false_easting",30000],PARAMETER["false_northing",75000],AUTHORITY["EPSG","21292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21413 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 13",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21413"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21414 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 14",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21414"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21415 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 15",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21415"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21416 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 16",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21416"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21417 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 17",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21417"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21418 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 18",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21418"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21419 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 19",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21419"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21420 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 20",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21420"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21421 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 21",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21421"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21422 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 22",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21422"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21423 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger zone 23",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21423"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21453 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 75E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21453"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21454 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 81E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21454"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21455 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 87E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21455"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21456 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 93E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21456"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21457 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 99E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21457"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21458 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 105E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21458"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21459 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 111E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21459"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21460 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 117E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21460"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21461 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 123E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21461"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21462 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 129E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21462"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21463 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger CM 135E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21463"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21473 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 13N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21473"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21474 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 14N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21474"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21475 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 15N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21475"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21476 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 16N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21476"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21477 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 17N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21477"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21478 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 18N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21478"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21479 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 19N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21479"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21480 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 20N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21480"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21481 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 21N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21481"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21482 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 22N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21482"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21483 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs +PROJCS["Beijing 1954 / Gauss-Kruger 23N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21483"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21500 + +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs +PROJCS["Belge 1950 (Brussels) / Belge Lambert 50",GEOGCS["Belge 1950 (Brussels)",DATUM["Reseau_National_Belge_1950_Brussels",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6809"]],PRIMEM["Brussels",4.367975,AUTHORITY["EPSG","8910"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4809"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",0],PARAMETER["false_easting",150000],PARAMETER["false_northing",5400000],AUTHORITY["EPSG","21500"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21780 + +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs +PROJCS["Bern 1898 (Bern) / LV03C",GEOGCS["Bern 1898 (Bern)",DATUM["CH1903_Bern",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6801"]],PRIMEM["Bern",7.439583333333333,AUTHORITY["EPSG","8907"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4801"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",0],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","21780"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 21781 + +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs +PROJCS["CH1903 / LV03",GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","21781"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 21782 + +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs +PROJCS["CH1903 / LV03C-G",GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","21782"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 21817 + +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / UTM zone 17N (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21817"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21818 + +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / UTM zone 18N",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21818"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 21891 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia West zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-77.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21891"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21892 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia Bogota zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-74.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21892"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21893 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia East Central zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-71.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21893"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21894 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia East (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-68.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21894"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 21896 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia West zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-77.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21896"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21897 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia Bogota zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-74.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21897"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21898 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia East Central zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-71.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21898"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 21899 + +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs +PROJCS["Bogota 1975 / Colombia East",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-68.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21899"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22032 + +proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs +PROJCS["Camacupa / UTM zone 32S",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22033 + +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs +PROJCS["Camacupa / UTM zone 33S",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22091 + +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs +PROJCS["Camacupa / TM 11.30 SE",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22091"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22092 + +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs +PROJCS["Camacupa / TM 12 SE",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22092"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22171 + +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 1",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22171"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22172 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 2",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22172"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22173 + +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 3",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22173"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22174 + +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 4",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22174"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22175 + +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 5",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22175"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22176 + +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 6",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22176"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22177 + +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 98 / Argentina 7",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22177"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22181 + +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 1",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22181"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22182 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 2",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22182"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22183 + +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 3",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22183"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22184 + +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 4",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22184"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22185 + +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 5",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22185"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22186 + +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 6",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22186"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22187 + +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["POSGAR 94 / Argentina 7",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22187"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22191 + +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 1",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22191"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22192 + +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 2",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22192"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22193 + +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 3",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22193"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22194 + +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 4",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22194"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22195 + +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 5",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22195"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22196 + +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 6",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22196"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22197 + +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs +PROJCS["Campo Inchauspe / Argentina 7",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22197"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 22234 + +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / UTM zone 34S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22235 + +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / UTM zone 35S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22236 + +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / UTM zone 36S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22275 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo15",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22275"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22277 + +proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo17",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22277"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22279 + +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo19",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22279"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22281 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo21",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22281"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22283 + +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo23",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22283"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22285 + +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo25",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22285"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22287 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo27",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22287"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22289 + +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo29",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22289"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22291 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo31",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22291"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22293 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs +PROJCS["Cape / Lo33",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22293"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 22300 + +PROJCS["Carthage (Paris) / Tunisia Mining Grid",GEOGCS["Carthage (Paris)",DATUM["Carthage_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6816"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4816"]],UNIT["kilometre",1000,AUTHORITY["EPSG","9036"]],PROJECTION["Tunisia_Mining_Grid"],PARAMETER["latitude_of_origin",38.81973],PARAMETER["central_meridian",7.83445],PARAMETER["false_easting",270],PARAMETER["false_northing",582],AUTHORITY["EPSG","22300"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22332 + +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs +PROJCS["Carthage / UTM zone 32N",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22391 + +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs +PROJCS["Carthage / Nord Tunisie",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",9.9],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22391"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 22392 + +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs +PROJCS["Carthage / Sud Tunisie",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",9.9],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22392"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 22521 + +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs +PROJCS["Corrego Alegre / UTM zone 21S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22521"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22522 + +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs +PROJCS["Corrego Alegre / UTM zone 22S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22522"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22523 + +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs +PROJCS["Corrego Alegre / UTM zone 23S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22523"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22524 + +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs +PROJCS["Corrego Alegre / UTM zone 24S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22524"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22525 + +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs +PROJCS["Corrego Alegre / UTM zone 25S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22525"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22700 + +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs +PROJCS["Deir ez Zor / Levant Zone",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",34.65],PARAMETER["central_meridian",37.35],PARAMETER["scale_factor",0.9996256],PARAMETER["false_easting",300000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22700"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 22770 + +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs +PROJCS["Deir ez Zor / Syria Lambert",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",34.65],PARAMETER["central_meridian",37.35],PARAMETER["scale_factor",0.9996256],PARAMETER["false_easting",300000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22770"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 22780 + +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs +PROJCS["Deir ez Zor / Levant Stereographic",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",34.2],PARAMETER["central_meridian",39.15],PARAMETER["scale_factor",0.9995341],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22780"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 22832 + +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Douala / UTM zone 32N (deprecated)",GEOGCS["Douala",DATUM["Douala",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6228"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4228"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22991 + +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs +PROJCS["Egypt 1907 / Blue Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",35],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",1100000],AUTHORITY["EPSG","22991"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22992 + +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs +PROJCS["Egypt 1907 / Red Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",615000],PARAMETER["false_northing",810000],AUTHORITY["EPSG","22992"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22993 + +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs +PROJCS["Egypt 1907 / Purple Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",700000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","22993"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 22994 + +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs +PROJCS["Egypt 1907 / Extended Purple Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",700000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","22994"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23028 + +proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 28N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23029 + +proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 29N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23029"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23030 + +proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 30N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23030"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23031 + +proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 31N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23032 + +proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 32N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23033 + +proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 33N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23034 + +proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 34N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23034"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23035 + +proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 35N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23036 + +proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 36N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23037 + +proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 37N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23038 + +proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / UTM zone 38N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23090 + +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM 0 N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23090"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23095 + +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs +PROJCS["ED50 / TM 5 NE",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23239 + +proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs +PROJCS["Fahud / UTM zone 39N",GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23240 + +proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs +PROJCS["Fahud / UTM zone 40N",GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23433 + +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Garoua / UTM zone 33N (deprecated)",GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6234"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4234"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23433"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23700 + +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs +PROJCS["HD72 / EOV",GEOGCS["HD72",DATUM["Hungarian_Datum_1972",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[52.17,-71.82,-14.9,0,0,0,0],AUTHORITY["EPSG","6237"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4237"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",47.14439372222222],PARAMETER["longitude_of_center",19.04857177777778],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",0.99993],PARAMETER["false_easting",650000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","23700"],AXIS["Y",EAST],AXIS["X",NORTH]] + + + 23830 + +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 46.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",94.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23830"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23831 + +proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 47.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",97.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23831"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23832 + +proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 47.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",100.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23832"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23833 + +proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 48.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",103.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23833"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23834 + +proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 48.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23834"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23835 + +proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 49.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",109.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23835"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23836 + +proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 49.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",112.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23836"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23837 + +proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 50.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",115.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23837"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23838 + +proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 50.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",118.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23838"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23839 + +proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 51.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23839"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23840 + +proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 51.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",124.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23840"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23841 + +proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 52.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23841"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23842 + +proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 52.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",130.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23842"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23843 + +proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 53.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23843"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23844 + +proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 53.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",136.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23844"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23845 + +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / Indonesia TM-3 zone 54.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",139.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23845"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 23846 + +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 46N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23846"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23847 + +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 47N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23847"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23848 + +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 48N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23848"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23849 + +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 49N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23849"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23850 + +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 50N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23850"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23851 + +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 51N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23851"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23852 + +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 52N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23852"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23853 + +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 53N (deprecated)",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23853"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23866 + +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 46N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23866"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23867 + +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 47N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23867"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23868 + +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 48N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23868"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23869 + +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 49N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23869"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23870 + +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 50N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23870"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23871 + +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 51N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23871"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23872 + +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 52N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23872"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23877 + +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 47S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23877"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23878 + +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 48S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23878"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23879 + +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 49S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23879"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23880 + +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 50S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23880"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23881 + +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 51S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23881"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23882 + +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 52S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23882"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23883 + +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 53S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23883"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23884 + +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["DGN95 / UTM zone 54S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23884"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23886 + +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 46S (deprecated)",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23886"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23887 + +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 47S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23887"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23888 + +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 48S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23888"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23889 + +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 49S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23889"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23890 + +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 50S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23890"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23891 + +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 51S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23892 + +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 52S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23893 + +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 53S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23894 + +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs +PROJCS["ID74 / UTM zone 54S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23894"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23946 + +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1954 / UTM zone 46N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23946"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23947 + +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1954 / UTM zone 47N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23947"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 23948 + +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1954 / UTM zone 48N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23948"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24047 + +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1975 / UTM zone 47N",GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24047"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24048 + +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs +PROJCS["Indian 1975 / UTM zone 48N",GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24048"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24100 + +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs +PROJCS["Jamaica 1875 / Jamaica (Old Grid)",GEOGCS["Jamaica 1875",DATUM["Jamaica_1875",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6241"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4241"]],UNIT["Clarke's foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",550000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","24100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24200 + +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs +PROJCS["JAD69 / Jamaica National Grid",GEOGCS["JAD69",DATUM["Jamaica_1969",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[70,207,389.5,0,0,0,0],AUTHORITY["EPSG","6242"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4242"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",250000],PARAMETER["false_northing",150000],AUTHORITY["EPSG","24200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24305 + +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1937 / UTM zone 45N",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24306 + +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1937 / UTM zone 46N",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24311 + +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1962 / UTM zone 41N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24312 + +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1962 / UTM zone 42N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24313 + +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1962 / UTM zone 43N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24342 + +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 42N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24343 + +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 43N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24344 + +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 44N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24345 + +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 45N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24346 + +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 46N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24346"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24347 + +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / UTM zone 47N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24370 + +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone 0",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",39.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99846154],PARAMETER["false_easting",2355500],PARAMETER["false_northing",2590000],AUTHORITY["EPSG","24370"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24371 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone I",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24371"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24372 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone IIa",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24372"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24373 + +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone III",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",19],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24373"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24374 + +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone IV",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",12],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24374"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24375 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1937 / India zone IIb",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743185.69],PARAMETER["false_northing",914395.23],AUTHORITY["EPSG","24375"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24376 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1962 / India zone I",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743196.4],PARAMETER["false_northing",914398.8],AUTHORITY["EPSG","24376"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24377 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1962 / India zone IIa",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743196.4],PARAMETER["false_northing",914398.8],AUTHORITY["EPSG","24377"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24378 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / India zone I",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24378"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24379 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / India zone IIa",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24379"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24380 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / India zone IIb",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24380"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24381 + +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / India zone III",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",19],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24381"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24382 + +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs +PROJCS["Kalianpur 1880 / India zone IIb",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24382"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24383 + +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs +PROJCS["Kalianpur 1975 / India zone IV",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",12],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24383"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24500 + +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs +PROJCS["Kertau 1968 / Singapore Grid",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",1.287646666666667],PARAMETER["central_meridian",103.8530022222222],PARAMETER["false_easting",30000],PARAMETER["false_northing",30000],AUTHORITY["EPSG","24500"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24547 + +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs +PROJCS["Kertau 1968 / UTM zone 47N",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24547"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24548 + +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs +PROJCS["Kertau 1968 / UTM zone 48N",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24548"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24571 + +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs +PROJCS["Kertau / R.S.O. Malaya (ch) (deprecated)",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["British chain (Benoit 1895 B)",20.11678249437587,AUTHORITY["EPSG","9062"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",40000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24571"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24600 + +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs +PROJCS["KOC Lambert",GEOGCS["KOC",DATUM["Kuwait_Oil_Company",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-294.7,-200.1,525.5,0,0,0,0],AUTHORITY["EPSG","6246"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4246"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","24600"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24718 + +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs +PROJCS["La Canoa / UTM zone 18N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24719 + +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs +PROJCS["La Canoa / UTM zone 19N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24720 + +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs +PROJCS["La Canoa / UTM zone 20N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24817 + +proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 17N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24817"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24818 + +proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 18N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24818"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24819 + +proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 19N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24819"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24820 + +proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 20N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24820"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24821 + +proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 21N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24821"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24877 + +proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 17S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24877"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24878 + +proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 18S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24878"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24879 + +proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 19S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24879"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24880 + +proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 20S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24880"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24881 + +proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 21S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24881"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24882 + +proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / UTM zone 22S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24882"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 24891 + +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / Peru west zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-6],PARAMETER["central_meridian",-80.5],PARAMETER["scale_factor",0.99983008],PARAMETER["false_easting",222000],PARAMETER["false_northing",1426834.743],AUTHORITY["EPSG","24891"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 24892 + +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / Peru central zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9.5],PARAMETER["central_meridian",-76],PARAMETER["scale_factor",0.99932994],PARAMETER["false_easting",720000],PARAMETER["false_northing",1039979.159],AUTHORITY["EPSG","24892"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 24893 + +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs +PROJCS["PSAD56 / Peru east zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9.5],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.99952992],PARAMETER["false_easting",1324000],PARAMETER["false_northing",1040084.558],AUTHORITY["EPSG","24893"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25000 + +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs +PROJCS["Leigon / Ghana Metre Grid",GEOGCS["Leigon",DATUM["Leigon",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-130,29,364,0,0,0,0],AUTHORITY["EPSG","6250"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4250"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.666666666666667],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",274319.51],PARAMETER["false_northing",0],AUTHORITY["EPSG","25000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25231 + +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Lome / UTM zone 31N",GEOGCS["Lome",DATUM["Lome",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6252"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4252"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25391 + +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs +PROJCS["Luzon 1911 / Philippines zone I",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25391"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25392 + +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs +PROJCS["Luzon 1911 / Philippines zone II",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25392"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25393 + +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs +PROJCS["Luzon 1911 / Philippines zone III",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25393"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25394 + +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs +PROJCS["Luzon 1911 / Philippines zone IV",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25394"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25395 + +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs +PROJCS["Luzon 1911 / Philippines zone V",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",125],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25395"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25700 + +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs +PROJCS["Makassar (Jakarta) / NEIEZ (deprecated)",GEOGCS["Makassar (Jakarta)",DATUM["Makassar_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6804"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4804"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","25700"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 25828 + +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 28N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25828"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25829 + +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 29N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25829"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25830 + +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 30N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25830"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25831 + +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 31N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25831"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25832 + +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25833 + +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 33N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25833"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25834 + +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 34N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25834"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25835 + +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 35N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25835"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25836 + +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 36N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25836"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25837 + +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 37N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25837"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25838 + +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / UTM zone 38N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25838"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 25884 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["ETRS89 / TM Baltic93",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25884"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 25932 + +proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs +PROJCS["Malongo 1987 / UTM zone 32S",GEOGCS["Malongo 1987",DATUM["Malongo_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-254.1,-5.36,-100.29,0,0,0,0],AUTHORITY["EPSG","6259"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4259"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","25932"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26191 + +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs +PROJCS["Merchich / Nord Maroc",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","26191"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26192 + +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs +PROJCS["Merchich / Sud Maroc",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",29.7],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999615596],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","26192"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26193 + +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs +PROJCS["Merchich / Sahara (deprecated)",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26.1],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1200000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26193"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26194 + +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs +PROJCS["Merchich / Sahara Nord",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26.1],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999616304],PARAMETER["false_easting",1200000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26194"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26195 + +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs +PROJCS["Merchich / Sahara Sud",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",22.5],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999616437],PARAMETER["false_easting",1500000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26195"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26237 + +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs +PROJCS["Massawa / UTM zone 37N",GEOGCS["Massawa",DATUM["Massawa",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[639,405,60,0,0,0,0],AUTHORITY["EPSG","6262"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4262"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26331 + +proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs +PROJCS["Minna / UTM zone 31N",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26331"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26332 + +proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs +PROJCS["Minna / UTM zone 32N",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26391 + +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs +PROJCS["Minna / Nigeria West Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",4.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",230738.26],PARAMETER["false_northing",0],AUTHORITY["EPSG","26391"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26392 + +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs +PROJCS["Minna / Nigeria Mid Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",8.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",670553.98],PARAMETER["false_northing",0],AUTHORITY["EPSG","26392"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26393 + +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs +PROJCS["Minna / Nigeria East Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",12.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",1110369.7],PARAMETER["false_northing",0],AUTHORITY["EPSG","26393"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26432 + +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs +PROJCS["Mhast / UTM zone 32S (deprecated)",GEOGCS["Mhast",DATUM["Mhast",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-252.95,-4.11,-96.38,0,0,0,0],AUTHORITY["EPSG","6264"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4264"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","26432"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26591 + +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs +PROJCS["Monte Mario (Rome) / Italy zone 1 (deprecated)",GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3.45233333333333],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26591"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26592 + +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs +PROJCS["Monte Mario (Rome) / Italy zone 2 (deprecated)",GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",2.54766666666666],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2520000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26592"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26632 + +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs +PROJCS["M'poraloko / UTM zone 32N",GEOGCS["M'poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26632"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26692 + +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs +PROJCS["M'poraloko / UTM zone 32S",GEOGCS["M'poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","26692"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26701 + +proj=utm +zone=1 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 1N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26701"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26702 + +proj=utm +zone=2 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 2N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26702"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26703 + +proj=utm +zone=3 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 3N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26703"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26704 + +proj=utm +zone=4 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 4N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26704"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26705 + +proj=utm +zone=5 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 5N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26705"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26706 + +proj=utm +zone=6 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 6N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26707 + +proj=utm +zone=7 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 7N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26708 + +proj=utm +zone=8 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 8N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26709 + +proj=utm +zone=9 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 9N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26710 + +proj=utm +zone=10 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 10N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26711 + +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26712 + +proj=utm +zone=12 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 12N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26713 + +proj=utm +zone=13 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 13N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26714 + +proj=utm +zone=14 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 14N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26715 + +proj=utm +zone=15 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 15N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26716 + +proj=utm +zone=16 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 16N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26717 + +proj=utm +zone=17 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 17N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26718 + +proj=utm +zone=18 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 18N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26719 + +proj=utm +zone=19 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 19N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26720 + +proj=utm +zone=20 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 20N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26721 + +proj=utm +zone=21 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 21N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26722 + +proj=utm +zone=22 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / UTM zone 22N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26729 + +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alabama East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26729"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26730 + +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alabama West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26730"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26731 + +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 1",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",16404166.67],PARAMETER["false_northing",-16404166.67],AUTHORITY["EPSG","26731"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26732 + +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 2",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26732"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26733 + +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 3",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26733"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26734 + +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 4",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26734"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26735 + +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 5",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26735"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26736 + +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 6",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26736"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26737 + +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 7",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26737"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26738 + +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 8",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26738"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26739 + +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 9",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26739"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26740 + +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Alaska zone 10",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",3000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26740"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26741 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone I",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26741"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26742 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone II",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26742"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26743 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone III",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26743"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26744 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone IV",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26744"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26745 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone V",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26745"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26746 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone VI",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26746"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26747 + +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone VII (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.41666666666666],PARAMETER["standard_parallel_2",33.86666666666667],PARAMETER["latitude_of_origin",34.13333333333333],PARAMETER["central_meridian",-118.3333333333333],PARAMETER["false_easting",4186692.58],PARAMETER["false_northing",416926.74],AUTHORITY["EPSG","26747"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26748 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Arizona East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26748"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26749 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Arizona Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26749"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26750 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Arizona West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26750"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26751 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Arkansas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26751"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26752 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Arkansas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26752"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26753 + +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Colorado North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.71666666666667],PARAMETER["standard_parallel_2",40.78333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26753"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26754 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Colorado Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26754"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26755 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Colorado South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26755"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26756 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Connecticut",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26756"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26757 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Delaware",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26757"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26758 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Florida East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26758"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26759 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Florida West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26759"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26760 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Florida North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26760"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26766 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Georgia East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26766"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26767 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Georgia West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26767"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26768 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Idaho East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26768"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26769 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Idaho Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26769"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26770 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Idaho West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26770"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26771 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Illinois East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26771"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26772 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Illinois West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26772"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26773 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Indiana East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26773"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26774 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Indiana West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26774"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26775 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Iowa North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26775"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26776 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Iowa South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26776"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26777 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Kansas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26777"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26778 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Kansas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26778"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26779 + +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Kentucky North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26779"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26780 + +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Kentucky South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.73333333333333],PARAMETER["standard_parallel_2",37.93333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26780"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26781 + +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Louisiana North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.16666666666667],PARAMETER["standard_parallel_2",32.66666666666666],PARAMETER["latitude_of_origin",30.66666666666667],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26781"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26782 + +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Louisiana South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",29.3],PARAMETER["standard_parallel_2",30.7],PARAMETER["latitude_of_origin",28.66666666666667],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26782"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26783 + +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Maine East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26783"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26784 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Maine West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26784"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26785 + +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Maryland",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.3],PARAMETER["standard_parallel_2",39.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-77],PARAMETER["false_easting",800000.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26785"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26786 + +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Massachusetts Mainland",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.71666666666667],PARAMETER["standard_parallel_2",42.68333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26786"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26787 + +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Massachusetts Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.28333333333333],PARAMETER["standard_parallel_2",41.48333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26787"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26791 + +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Minnesota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.03333333333333],PARAMETER["standard_parallel_2",48.63333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26791"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26792 + +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Minnesota Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.61666666666667],PARAMETER["standard_parallel_2",47.05],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26792"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26793 + +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Minnesota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.78333333333333],PARAMETER["standard_parallel_2",45.21666666666667],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26793"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26794 + +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Mississippi East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26794"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26795 + +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Mississippi West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26795"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26796 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Missouri East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26796"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26797 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Missouri Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26797"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26798 + +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Missouri West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26798"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26799 + +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / California zone VII",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.41666666666666],PARAMETER["standard_parallel_2",33.86666666666667],PARAMETER["latitude_of_origin",34.13333333333333],PARAMETER["central_meridian",-118.3333333333333],PARAMETER["false_easting",4186692.58],PARAMETER["false_northing",4160926.74],AUTHORITY["EPSG","26799"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26801 + +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan East",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-83.66666666666667],PARAMETER["scale_factor",0.999942857],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26801"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26802 + +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan Old Central",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-85.75],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26802"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26803 + +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan West",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-88.75],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26803"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26811 + +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan North",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.48333333333333],PARAMETER["standard_parallel_2",47.08333333333334],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26811"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26812 + +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan Central",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.18333333333333],PARAMETER["standard_parallel_2",45.7],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26812"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26813 + +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs +PROJCS["NAD Michigan / Michigan South",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.1],PARAMETER["standard_parallel_2",43.66666666666666],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26813"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26814 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine East (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26814"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26815 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine West (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26815"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26819 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26819"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26820 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26820"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26821 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26821"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26822 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26822"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26823 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26823"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26824 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26824"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26825 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine East (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26825"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26826 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Maine West (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26826"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26830 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26830"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26831 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26831"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26832 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26832"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26833 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26833"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26834 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26834"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26835 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(HARN) / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26835"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26836 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine East (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26836"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26837 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Maine West (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26837"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26841 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26841"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26842 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26842"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26843 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26843"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26844 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26844"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26845 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26845"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26846 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26846"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26847 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Maine East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26847"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26848 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Maine West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26848"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26849 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Minnesota North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26849"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26850 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Minnesota Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26850"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26851 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Minnesota South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26851"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26852 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / Nebraska (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26852"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26853 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / West Virginia North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26853"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26854 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / West Virginia South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26854"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26855 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Maine East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26855"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26856 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Maine West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26856"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26857 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Minnesota North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26857"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26858 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Minnesota Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26858"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26859 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Minnesota South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26859"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26860 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / Nebraska (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26860"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26861 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / West Virginia North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26861"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26862 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(HARN) / West Virginia South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26862"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26863 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Maine East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26863"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26864 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Maine West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26864"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26865 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26865"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26866 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26866"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26867 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Minnesota South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26867"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26868 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / Nebraska (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26868"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26869 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26869"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26870 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83(NSRS2007) / West Virginia South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26870"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26891 + +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 11",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26892 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 12",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26893 + +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 13",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26894 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 14",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26894"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26895 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 15",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26895"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26896 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 16",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26896"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26897 + +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 17",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26897"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26898 + +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 1",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26898"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 26899 + +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83(CSRS) / MTM zone 2",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26899"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 26901 + +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 1N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26902 + +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 2N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26902"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26903 + +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 3N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26903"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26904 + +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 4N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26904"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26905 + +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 5N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26905"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26906 + +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 6N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26906"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26907 + +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 7N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26907"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26908 + +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 8N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26908"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26909 + +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 9N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26909"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26910 + +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 10N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26910"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26911 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 11N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26911"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26912 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 12N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26912"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26913 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 13N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26913"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26914 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 14N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26914"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26915 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 15N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26915"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26916 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 16N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26916"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26917 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 17N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26917"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26918 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 18N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26918"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26919 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 19N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26919"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26920 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 20N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26920"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26921 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 21N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26921"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26922 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 22N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26922"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26923 + +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / UTM zone 23N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26923"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 26929 + +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alabama East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26929"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26930 + +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alabama West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26930"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26931 + +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5000000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","26931"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26932 + +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26932"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26933 + +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26933"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26934 + +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26934"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26935 + +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26935"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26936 + +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26936"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26937 + +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 7",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26937"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26938 + +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 8",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26938"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26939 + +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 9",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26939"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26940 + +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Alaska zone 10",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26940"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26941 + +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26941"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26942 + +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26942"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26943 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26943"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26944 + +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26944"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26945 + +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26945"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26946 + +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / California zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26946"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26948 + +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Arizona East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26948"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26949 + +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Arizona Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26949"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26950 + +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Arizona West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26950"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26951 + +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Arkansas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26951"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26952 + +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Arkansas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26952"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26953 + +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Colorado North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26953"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26954 + +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Colorado Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26954"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26955 + +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Colorado South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26955"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26956 + +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Connecticut",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","26956"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26957 + +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Delaware",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26957"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26958 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Florida East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26958"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26959 + +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Florida West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26959"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26960 + +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Florida North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26960"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26961 + +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Hawaii zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26961"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26962 + +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Hawaii zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26962"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26963 + +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Hawaii zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26963"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26964 + +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Hawaii zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26964"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26965 + +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Hawaii zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26965"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26966 + +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Georgia East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26966"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26967 + +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Georgia West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26967"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26968 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Idaho East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26968"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26969 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Idaho Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26969"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26970 + +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Idaho West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26970"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26971 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Illinois East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26971"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26972 + +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Illinois West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26972"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26973 + +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Indiana East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","26973"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26974 + +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Indiana West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","26974"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26975 + +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Iowa North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","26975"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26976 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Iowa South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26976"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26977 + +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kansas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26977"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26978 + +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kansas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26978"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26979 + +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kentucky North (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",37.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26979"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26980 + +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Kentucky South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26980"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26981 + +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Louisiana North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26981"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26982 + +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Louisiana South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26982"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26983 + +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26983"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26984 + +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maine West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26984"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26985 + +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Maryland",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26985"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26986 + +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","26986"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26987 + +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Massachusetts Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26987"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26988 + +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Michigan North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26988"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26989 + +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Michigan Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26989"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26990 + +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Michigan South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26990"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26991 + +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26991"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26992 + +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26992"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26993 + +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Minnesota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26993"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26994 + +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Mississippi East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26994"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26995 + +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Mississippi West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26995"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26996 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Missouri East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26996"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26997 + +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Missouri Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26997"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 26998 + +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Missouri West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26998"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27037 + +proj=utm +zone=37 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs +PROJCS["Nahrwan 1967 / UTM zone 37N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27038 + +proj=utm +zone=38 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs +PROJCS["Nahrwan 1967 / UTM zone 38N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27039 + +proj=utm +zone=39 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs +PROJCS["Nahrwan 1967 / UTM zone 39N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27039"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27040 + +proj=utm +zone=40 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs +PROJCS["Nahrwan 1967 / UTM zone 40N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27040"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27120 + +proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs +PROJCS["Naparima 1972 / UTM zone 20N",GEOGCS["Naparima 1972",DATUM["Naparima_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10,375,165,0,0,0,0],AUTHORITY["EPSG","6271"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4271"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27120"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27200 + +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / New Zealand Map Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["New_Zealand_Map_Grid"],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",173],PARAMETER["false_easting",2510000],PARAMETER["false_northing",6023150],AUTHORITY["EPSG","27200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27205 + +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Mount Eden Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-36.87986527777778],PARAMETER["central_meridian",174.7643393611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27205"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27206 + +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Bay of Plenty Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-37.76124980555556],PARAMETER["central_meridian",176.46619725],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27206"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27207 + +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Poverty Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-38.62470277777778],PARAMETER["central_meridian",177.8856362777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27207"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27208 + +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Hawkes Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.65092930555556],PARAMETER["central_meridian",176.6736805277778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27208"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27209 + +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Taranaki Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.13575830555556],PARAMETER["central_meridian",174.22801175],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27209"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27210 + +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Tuhirangi Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.51247038888889],PARAMETER["central_meridian",175.6400368055556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27210"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27211 + +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Wanganui Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.24194713888889],PARAMETER["central_meridian",175.4880996111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27211"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27212 + +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Wairarapa Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.92553263888889],PARAMETER["central_meridian",175.6473496666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27212"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27213 + +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Wellington Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.30131963888888],PARAMETER["central_meridian",174.7766231111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27213"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27214 + +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Collingwood Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.71475905555556],PARAMETER["central_meridian",172.6720465],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27214"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27215 + +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Nelson Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.27454472222222],PARAMETER["central_meridian",173.2993168055555],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27215"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27216 + +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Karamea Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28991152777778],PARAMETER["central_meridian",172.1090281944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27216"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27217 + +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Buller Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.81080286111111],PARAMETER["central_meridian",171.5812600555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27217"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27218 + +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Grey Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.33369427777778],PARAMETER["central_meridian",171.5497713055556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27218"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27219 + +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Amuri Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.68911658333333],PARAMETER["central_meridian",173.0101333888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27219"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27220 + +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Marlborough Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.54448666666666],PARAMETER["central_meridian",173.8020741111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27220"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27221 + +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Hokitika Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.88632236111111],PARAMETER["central_meridian",170.9799935],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27221"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27222 + +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Okarito Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.11012813888889],PARAMETER["central_meridian",170.2609258333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27222"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27223 + +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Jacksons Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.97780288888889],PARAMETER["central_meridian",168.606267],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27223"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27224 + +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Mount Pleasant Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.59063758333333],PARAMETER["central_meridian",172.7271935833333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27224"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27225 + +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Gawler Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.74871155555556],PARAMETER["central_meridian",171.3607484722222],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27225"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27226 + +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Timaru Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.40222036111111],PARAMETER["central_meridian",171.0572508333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27226"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27227 + +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Lindis Peak Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.73526797222222],PARAMETER["central_meridian",169.4677550833333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27227"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27228 + +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Mount Nicholas Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.13290258333333],PARAMETER["central_meridian",168.3986411944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27228"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27229 + +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Mount York Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.56372616666666],PARAMETER["central_meridian",167.7388617777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27229"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27230 + +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Observation Point Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.81619661111111],PARAMETER["central_meridian",170.6285951666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27230"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27231 + +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / North Taieri Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.86151336111111],PARAMETER["central_meridian",170.2825891111111],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27231"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27232 + +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / Bluff Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-46.60000961111111],PARAMETER["central_meridian",168.342872],PARAMETER["scale_factor",1],PARAMETER["false_easting",300002.66],PARAMETER["false_northing",699999.58],AUTHORITY["EPSG","27232"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 27258 + +proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / UTM zone 58S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27259 + +proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / UTM zone 59S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27260 + +proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +PROJCS["NZGD49 / UTM zone 60S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27291 + +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +to_meter=0.9143984146160287 +no_defs +PROJCS["NZGD49 / North Island Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["British yard (Sears 1922)",0.9143984146160287,AUTHORITY["EPSG","9040"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39],PARAMETER["central_meridian",175.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","27291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27292 + +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +to_meter=0.9143984146160287 +no_defs +PROJCS["NZGD49 / South Island Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["British yard (Sears 1922)",0.9143984146160287,AUTHORITY["EPSG","9040"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44],PARAMETER["central_meridian",171.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","27292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27391 + +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone I",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",-4.666666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27391"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27392 + +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone II",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",-2.333333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27392"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27393 + +proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone III",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27393"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27394 + +proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone IV",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",2.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27394"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27395 + +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone V",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",6.166666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27395"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27396 + +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone VI",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",10.16666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27396"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27397 + +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone VII",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",14.16666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27397"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27398 + +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs +PROJCS["NGO 1948 (Oslo) / NGO zone VIII",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",18.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27398"],AXIS["x",NORTH],AXIS["y",EAST]] + + + 27429 + +proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs +PROJCS["Datum 73 / UTM zone 29N",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27429"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 27492 + +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs +PROJCS["Datum 73 / Modified Portuguese Grid (deprecated)",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-8.131906111111112],PARAMETER["scale_factor",1],PARAMETER["false_easting",180.598],PARAMETER["false_northing",-86.99],AUTHORITY["EPSG","27492"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 27493 + +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs +PROJCS["Datum 73 / Modified Portuguese Grid",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-8.131906111111112],PARAMETER["scale_factor",1],PARAMETER["false_easting",180.598],PARAMETER["false_northing",-86.99],AUTHORITY["EPSG","27493"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27500 + +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs +PROJCS["ATF (Paris) / Nord de Guerre",GEOGCS["ATF (Paris)",DATUM["Ancienne_Triangulation_Francaise_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6901"]],PRIMEM["Paris RGS",2.337208333333333,AUTHORITY["EPSG","8914"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4901"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",5.999999999999998],PARAMETER["scale_factor",0.99950908],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","27500"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27561 + +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert Nord France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27561"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27562 + +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert Centre France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27562"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27563 + +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert Sud France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27563"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27564 + +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert Corse",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",185861.369],AUTHORITY["EPSG","27564"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27571 + +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert zone I",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","27571"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27572 + +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert zone II",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","27572"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27573 + +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert zone III",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","27573"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27574 + +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Lambert zone IV",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",4185861.369],AUTHORITY["EPSG","27574"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27581 + +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / France I (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","27581"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27582 + +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / France II (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","27582"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27583 + +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / France III (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","27583"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27584 + +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / France IV (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",4185861.369],AUTHORITY["EPSG","27584"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27591 + +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Nord France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27591"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27592 + +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Centre France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27592"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27593 + +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Sud France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27593"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27594 + +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["NTF (Paris) / Corse (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",185861.369],AUTHORITY["EPSG","27594"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 27700 + +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs +PROJCS["OSGB 1936 / British National Grid",GEOGCS["OSGB 1936",DATUM["OSGB_1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[446.448,-125.157,542.06,0.15,0.247,0.842,-20.489],AUTHORITY["EPSG","6277"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4277"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],AUTHORITY["EPSG","27700"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28191 + +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs +PROJCS["Palestine 1923 / Palestine Grid",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",126867.909],AUTHORITY["EPSG","28191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28192 + +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs +PROJCS["Palestine 1923 / Palestine Belt",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",1126867.909],AUTHORITY["EPSG","28192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28193 + +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs +PROJCS["Palestine 1923 / Israeli CS Grid",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",1126867.909],AUTHORITY["EPSG","28193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28232 + +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs +PROJCS["Pointe Noire / UTM zone 32S",GEOGCS["Pointe Noire",DATUM["Congo_1960_Pointe_Noire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-148,51,-291,0,0,0,0],AUTHORITY["EPSG","6282"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4282"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28348 + +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 48",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28349 + +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 49",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28350 + +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 50",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28351 + +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 51",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28352 + +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 52",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28353 + +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 53",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28354 + +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 54",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28355 + +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 55",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28356 + +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 56",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28357 + +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 57",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28358 + +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["GDA94 / MGA zone 58",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28402 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28402"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28403 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28403"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28404 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28404"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28405 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28405"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28406 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28406"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28407 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28407"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28408 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28408"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28409 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28409"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28410 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28410"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28411 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 11",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28411"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28412 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 12",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28412"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28413 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 13",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28413"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28414 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 14",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28414"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28415 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 15",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28415"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28416 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 16",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28416"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28417 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 17",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28417"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28418 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 18",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28418"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28419 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 19",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28419"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28420 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 20",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28420"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28421 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 21",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28421"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28422 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 22",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28422"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28423 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 23",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28423"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28424 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 24",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28424"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28425 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 25",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28425"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28426 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 26",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28426"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28427 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 27",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28427"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28428 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 28",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28428"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28429 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 29",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28429"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28430 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 30",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28430"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28431 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 31",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28431"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28432 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger zone 32",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28432"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28462 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 2N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28462"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28463 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 3N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28463"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28464 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 4N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28464"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28465 + +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 5N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28465"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28466 + +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 6N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28466"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28467 + +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 7N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28467"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28468 + +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 8N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28468"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28469 + +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 9N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28469"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28470 + +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 10N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28470"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28471 + +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 11N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28471"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28472 + +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 12N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28472"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28473 + +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 13N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28473"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28474 + +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 14N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28474"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28475 + +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 15N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28475"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28476 + +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 16N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28476"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28477 + +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 17N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28477"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28478 + +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 18N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28478"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28479 + +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 19N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28479"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28480 + +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 20N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28480"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28481 + +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 21N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28481"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28482 + +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 22N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28482"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28483 + +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 23N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28483"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28484 + +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 24N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28484"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28485 + +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 25N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28485"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28486 + +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 26N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28486"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28487 + +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 27N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28487"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28488 + +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 28N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28488"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28489 + +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 29N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28489"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28490 + +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 30N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28490"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28491 + +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 31N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28491"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28492 + +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs +PROJCS["Pulkovo 1942 / Gauss-Kruger 32N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28492"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 28600 + +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128,-283,22,0,0,0,0 +units=m +no_defs +PROJCS["Qatar 1974 / Qatar National Grid",GEOGCS["Qatar 1974",DATUM["Qatar_1974",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-128,-283,22,0,0,0,0],AUTHORITY["EPSG","6285"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4285"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.45],PARAMETER["central_meridian",51.21666666666667],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","28600"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 28991 + +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs +PROJCS["Amersfoort / RD Old",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","28991"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 28992 + +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs +PROJCS["Amersfoort / RD New",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],AUTHORITY["EPSG","28992"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 29100 + +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / Brazil Polyconic (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polyconic"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["false_easting",5000000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29100"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 29101 + +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / Brazil Polyconic",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polyconic"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["false_easting",5000000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29101"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 29118 + +proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 18N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29118"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29119 + +proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 19N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29119"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29120 + +proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 20N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29120"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29121 + +proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 21N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29121"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29122 + +proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 22N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29122"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29168 + +proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 18N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29168"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29169 + +proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 19N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29169"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29170 + +proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 20N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29171 + +proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 21N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29172 + +proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 22N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29172"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29177 + +proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 17S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29177"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29178 + +proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 18S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29178"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29179 + +proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 19S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29179"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29180 + +proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 20S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29180"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29181 + +proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 21S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29181"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29182 + +proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 22S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29182"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29183 + +proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 23S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29183"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29184 + +proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 24S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29184"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29185 + +proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 25S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29185"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29187 + +proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 17S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29187"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29188 + +proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 18S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29189 + +proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 19S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29190 + +proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 20S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29190"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29191 + +proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 21S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29192 + +proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 22S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29193 + +proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 23S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29194 + +proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 24S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29194"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29195 + +proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs +PROJCS["SAD69 / UTM zone 25S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29220 + +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs +PROJCS["Sapper Hill 1943 / UTM zone 20S",GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29221 + +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs +PROJCS["Sapper Hill 1943 / UTM zone 21S",GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29333 + +proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs +PROJCS["Schwarzeck / UTM zone 33S",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29333"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29371 + +proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/11",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",11],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29371"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29373 + +proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/13",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",13],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29373"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29375 + +proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/15",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29375"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29377 + +proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/17",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29377"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29379 + +proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/19",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29379"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29381 + +proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/21",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29381"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29383 + +proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/23",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29383"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29385 + +proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs +PROJCS["Schwarzeck / Lo22/25",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29385"],AXIS["Y",WEST],AXIS["X",SOUTH]] + + + 29635 + +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Sudan / UTM zone 35N (deprecated)",GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29635"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29636 + +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Sudan / UTM zone 36N (deprecated)",GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29636"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29700 + +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["Tananarive (Paris) / Laborde Grid (deprecated)",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",21],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29700"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 29701 + +PROJCS["Tananarive (Paris) / Laborde Grid",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Laborde_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",100],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29701"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 29702 + +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs +PROJCS["Tananarive (Paris) / Laborde Grid approximation",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",21],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29702"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 29738 + +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs +PROJCS["Tananarive / UTM zone 38S",GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29738"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29739 + +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs +PROJCS["Tananarive / UTM zone 39S",GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29739"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29849 + +proj=utm +zone=49 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs +PROJCS["Timbalai 1948 / UTM zone 49N",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29849"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29850 + +proj=utm +zone=50 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs +PROJCS["Timbalai 1948 / UTM zone 50N",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29850"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29871 + +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=20.11676512155263 +no_defs +PROJCS["Timbalai 1948 / RSO Borneo (ch)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["British chain (Sears 1922)",20.11676512155263,AUTHORITY["EPSG","9042"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",29352.4763],PARAMETER["false_northing",22014.3572],AUTHORITY["EPSG","29871"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29872 + +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=0.3047994715386762 +no_defs +PROJCS["Timbalai 1948 / RSO Borneo (ft)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["British foot (Sears 1922)",0.3047994715386762,AUTHORITY["EPSG","9041"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",1937263.44],PARAMETER["false_northing",1452947.58],AUTHORITY["EPSG","29872"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29873 + +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs +PROJCS["Timbalai 1948 / RSO Borneo (m)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",590476.87],PARAMETER["false_northing",442857.65],AUTHORITY["EPSG","29873"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29900 + +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs +PROJCS["TM65 / Irish National Grid (deprecated)",GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29900"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29901 + +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs +PROJCS["OSNI 1952 / Irish National Grid",GEOGCS["OSNI 1952",DATUM["OSNI_1952",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6188"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4188"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29902 + +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs +PROJCS["TM65 / Irish Grid",GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29902"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 29903 + +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs +PROJCS["TM75 / Irish Grid",GEOGCS["TM75",DATUM["Geodetic_Datum_of_1965",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6300"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4300"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29903"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30161 + +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS I",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",129.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30161"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30162 + +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS II",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30162"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30163 + +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS III",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",132.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30163"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30164 + +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS IV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30164"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30165 + +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS V",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",134.3333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30165"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30166 + +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS VI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30166"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30167 + +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS VII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",137.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30167"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30168 + +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS VIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",138.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30168"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30169 + +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS IX",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",139.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30169"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30170 + +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS X",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",140.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30170"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30171 + +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",140.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30171"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30172 + +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",142.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30172"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30173 + +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",144.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30173"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30174 + +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XIV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30174"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30175 + +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30175"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30176 + +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XVI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",124],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30176"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30177 + +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XVII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30177"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30178 + +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XVIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30178"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30179 + +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs +PROJCS["Tokyo / Japan Plane Rectangular CS XIX",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30179"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 30200 + +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs +PROJCS["Trinidad 1903 / Trinidad Grid",GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]],UNIT["Clarke's link",0.201166195164,AUTHORITY["EPSG","9039"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",10.44166666666667],PARAMETER["central_meridian",-61.33333333333334],PARAMETER["false_easting",430000],PARAMETER["false_northing",325000],AUTHORITY["EPSG","30200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30339 + +proj=utm +zone=39 +ellps=helmert +units=m +no_defs +PROJCS["TC(1948) / UTM zone 39N",GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30340 + +proj=utm +zone=40 +ellps=helmert +units=m +no_defs +PROJCS["TC(1948) / UTM zone 40N",GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30491 + +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs +PROJCS["Voirol 1875 / Nord Algerie (ancienne)",GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30491"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30492 + +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs +PROJCS["Voirol 1875 / Sud Algerie (ancienne)",GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30492"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30493 + +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Voirol 1879 / Nord Algerie (ancienne)",GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30493"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30494 + +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Voirol 1879 / Sud Algerie (ancienne)",GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30494"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30729 + +proj=utm +zone=29 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / UTM zone 29N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30729"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30730 + +proj=utm +zone=30 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / UTM zone 30N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30730"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30731 + +proj=utm +zone=31 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / UTM zone 31N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30731"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30732 + +proj=utm +zone=32 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / UTM zone 32N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30732"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 30791 + +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / Voirol Unifie Nord",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500135],PARAMETER["false_northing",300090],AUTHORITY["EPSG","30791"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30792 + +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs +PROJCS["Nord Sahara 1959 / Voirol Unifie Sud",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500135],PARAMETER["false_northing",300090],AUTHORITY["EPSG","30792"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 30800 + +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs +PROJCS["RT38 2.5 gon W (deprecated)",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30800"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31028 + +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs +PROJCS["Yoff / UTM zone 28N",GEOGCS["Yoff",DATUM["Yoff",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6310"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4310"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31121 + +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs +PROJCS["Zanderij / UTM zone 21N",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31121"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31154 + +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs +PROJCS["Zanderij / TM 54 NW",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31154"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31170 + +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs +PROJCS["Zanderij / Suriname Old TM",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.68333333333333],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31171 + +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs +PROJCS["Zanderij / Suriname TM",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.68333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31251 + +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria GK West Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31251"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31252 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria GK Central Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31252"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31253 + +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria GK East Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31253"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31254 + +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK West",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31254"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31255 + +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK Central",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31255"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31256 + +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK East",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31256"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31257 + +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK M28",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31257"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31258 + +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK M31",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31258"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31259 + +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria GK M34",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31259"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31265 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / 3-degree Gauss zone 5 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31265"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31266 + +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / 3-degree Gauss zone 6 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31266"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31267 + +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / 3-degree Gauss zone 7 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31267"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31268 + +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / 3-degree Gauss zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31268"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31275 + +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Balkans zone 5 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31275"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31276 + +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Balkans zone 6 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31276"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31277 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Balkans zone 7 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31277"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31278 + +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Balkans zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31278"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31279 + +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Balkans zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31279"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31281 + +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria West Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31281"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31282 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria Central Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31282"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31283 + +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria East Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31283"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31284 + +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria M28",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31284"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31285 + +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria M31",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31285"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31286 + +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria M34",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31286"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31287 + +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria Lambert",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","31287"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31288 + +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / M28",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31288"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31289 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / M31",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31289"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31290 + +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / M34",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31290"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31291 + +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria West Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31291"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31292 + +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria Central Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31292"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31293 + +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs +PROJCS["MGI (Ferro) / Austria East Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31293"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31294 + +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / M28 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31294"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31295 + +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / M31 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31295"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31296 + +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / M34 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31296"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31297 + +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs +PROJCS["MGI / Austria Lambert (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","31297"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31300 + +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747 +units=m +no_defs +PROJCS["Belge 1972 / Belge Lambert 72",GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP_Belgium"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",4.356939722222222],PARAMETER["false_easting",150000.01256],PARAMETER["false_northing",5400088.4378],AUTHORITY["EPSG","31300"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31370 + +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747 +units=m +no_defs +PROJCS["Belge 1972 / Belgian Lambert 72",GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",51.16666723333333],PARAMETER["standard_parallel_2",49.8333339],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",4.367486666666666],PARAMETER["false_easting",150000.013],PARAMETER["false_northing",5400088.438],AUTHORITY["EPSG","31370"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31461 + +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss zone 1 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31461"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31462 + +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss zone 2 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31462"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31463 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss zone 3 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31463"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31464 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss zone 4 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31464"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31465 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss zone 5 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31465"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31466 + +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss-Kruger zone 2",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31466"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31467 + +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss-Kruger zone 3",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31467"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31468 + +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss-Kruger zone 4",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31468"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31469 + +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs +PROJCS["DHDN / 3-degree Gauss-Kruger zone 5",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31469"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31528 + +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs +PROJCS["Conakry 1905 / UTM zone 28N",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31528"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31529 + +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs +PROJCS["Conakry 1905 / UTM zone 29N",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31529"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31600 + +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs +PROJCS["Dealul Piscului 1930 / Stereo 33",GEOGCS["Dealul Piscului 1930",DATUM["Dealul_Piscului_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[103.25,-100.4,-307.19,0,0,0,0],AUTHORITY["EPSG","6316"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4316"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",45.9],PARAMETER["central_meridian",25.39246588888889],PARAMETER["scale_factor",0.9996667],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","31600"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 31700 + +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs +PROJCS["Dealul Piscului 1970/ Stereo 70 (deprecated)",GEOGCS["Dealul Piscului 1970",DATUM["Dealul_Piscului_1970",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[28,-121,-77,0,0,0,0],AUTHORITY["EPSG","6317"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4317"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","31700"],AXIS["X",NORTH],AXIS["Y",EAST]] + + + 31838 + +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs +PROJCS["NGN / UTM zone 38N",GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31838"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31839 + +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs +PROJCS["NGN / UTM zone 39N",GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31839"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31900 + +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs +PROJCS["KUDAMS / KTM (deprecated)",GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31900"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31901 + +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs +PROJCS["KUDAMS / KTM",GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31965 + +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 11N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31965"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31966 + +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 12N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31966"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31967 + +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 13N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31967"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31968 + +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 14N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31968"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31969 + +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 15N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31969"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31970 + +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 16N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31970"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31971 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 17N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31971"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31972 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 18N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31972"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31973 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 19N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31973"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31974 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 20N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31974"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31975 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 21N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31975"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31976 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 22N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31976"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31977 + +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 17S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31977"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31978 + +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 18S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31979 + +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 19S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31980 + +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 20S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31980"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31981 + +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 21S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31981"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31982 + +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 22S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31982"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31983 + +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 23S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31983"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31984 + +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 24S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31984"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31985 + +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 2000 / UTM zone 25S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31985"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31986 + +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 17N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31986"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31987 + +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 18N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31987"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31988 + +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 19N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31988"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31989 + +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 20N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31989"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31990 + +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 21N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31990"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31991 + +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 22N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31991"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31992 + +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 17S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31992"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31993 + +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 18S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31993"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31994 + +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 19S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31994"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31995 + +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 20S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31995"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31996 + +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 21S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31996"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31997 + +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 22S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31998 + +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 23S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31998"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 31999 + +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 24S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31999"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32000 + +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["SIRGAS 1995 / UTM zone 25S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32001 + +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Montana North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.71666666666667],PARAMETER["standard_parallel_2",47.85],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32001"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32002 + +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Montana Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.88333333333333],PARAMETER["standard_parallel_2",46.45],PARAMETER["latitude_of_origin",45.83333333333334],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32002"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32003 + +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Montana South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.4],PARAMETER["standard_parallel_2",44.86666666666667],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32003"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32005 + +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Nebraska North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.85],PARAMETER["standard_parallel_2",42.81666666666667],PARAMETER["latitude_of_origin",41.33333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32005"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32006 + +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Nebraska South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.28333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-99.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32006"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32007 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Nevada East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32007"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32008 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Nevada Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32008"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32009 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Nevada West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32009"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32010 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New Hampshire",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32010"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32011 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New Jersey",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.66666666666667],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32011"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32012 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New Mexico East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32012"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32013 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New Mexico Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32013"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32014 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New Mexico West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32014"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32015 + +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New York East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-74.33333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32015"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32016 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New York Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32016"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32017 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New York West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32017"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32018 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / New York Long Island (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-74],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32018"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32019 + +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / North Carolina",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.33333333333334],PARAMETER["standard_parallel_2",36.16666666666666],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32019"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32020 + +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / North Dakota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.43333333333333],PARAMETER["standard_parallel_2",48.73333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32020"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32021 + +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / North Dakota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.18333333333333],PARAMETER["standard_parallel_2",47.48333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32021"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32022 + +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Ohio North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.43333333333333],PARAMETER["standard_parallel_2",41.7],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32022"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32023 + +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Ohio South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.73333333333333],PARAMETER["standard_parallel_2",40.03333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32023"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32024 + +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Oklahoma North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.56666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32024"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32025 + +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Oklahoma South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.93333333333333],PARAMETER["standard_parallel_2",35.23333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32025"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32026 + +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Oregon North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.33333333333334],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32026"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32027 + +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Oregon South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.33333333333334],PARAMETER["standard_parallel_2",44],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32027"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32028 + +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Pennsylvania North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.88333333333333],PARAMETER["standard_parallel_2",41.95],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32028"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32029 + +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Pennsylvania South (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.93333333333333],PARAMETER["standard_parallel_2",40.8],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32029"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32030 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Rhode Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.9999938],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32030"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32031 + +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / South Carolina North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.76666666666667],PARAMETER["standard_parallel_2",34.96666666666667],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32031"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32033 + +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / South Carolina South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.33333333333334],PARAMETER["standard_parallel_2",33.66666666666666],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32033"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32034 + +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / South Dakota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.41666666666666],PARAMETER["standard_parallel_2",45.68333333333333],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32034"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32035 + +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / South Dakota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.83333333333334],PARAMETER["standard_parallel_2",44.4],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32035"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32036 + +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Tennessee (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.25],PARAMETER["standard_parallel_2",36.41666666666666],PARAMETER["latitude_of_origin",34.66666666666666],PARAMETER["central_meridian",-86],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32036"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32037 + +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Texas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.65],PARAMETER["standard_parallel_2",36.18333333333333],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32037"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32038 + +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Texas North Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.13333333333333],PARAMETER["standard_parallel_2",33.96666666666667],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-97.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32038"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32039 + +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Texas Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.11666666666667],PARAMETER["standard_parallel_2",31.88333333333333],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32039"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32040 + +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Texas South Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",28.38333333333333],PARAMETER["standard_parallel_2",30.28333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32040"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32041 + +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Texas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",26.16666666666667],PARAMETER["standard_parallel_2",27.83333333333333],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32041"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32042 + +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Utah North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.71666666666667],PARAMETER["standard_parallel_2",41.78333333333333],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32042"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32043 + +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Utah Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.01666666666667],PARAMETER["standard_parallel_2",40.65],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32043"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32044 + +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Utah South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.21666666666667],PARAMETER["standard_parallel_2",38.35],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32044"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32045 + +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Vermont",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32045"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32046 + +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Virginia North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.03333333333333],PARAMETER["standard_parallel_2",39.2],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32046"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32047 + +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Virginia South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",37.96666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32047"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32048 + +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Washington North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.5],PARAMETER["standard_parallel_2",48.73333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32048"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32049 + +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Washington South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.83333333333334],PARAMETER["standard_parallel_2",47.33333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32049"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32050 + +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / West Virginia North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39],PARAMETER["standard_parallel_2",40.25],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32050"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32051 + +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / West Virginia South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.48333333333333],PARAMETER["standard_parallel_2",38.88333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32051"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32052 + +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wisconsin North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.56666666666667],PARAMETER["standard_parallel_2",46.76666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32052"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32053 + +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wisconsin Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.25],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32053"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32054 + +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wisconsin South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.73333333333333],PARAMETER["standard_parallel_2",44.06666666666667],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32054"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32055 + +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wyoming East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32055"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32056 + +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wyoming East Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32056"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32057 + +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wyoming West Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32057"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32058 + +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Wyoming West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32058"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32061 + +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Guatemala Norte",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",16.81666666666667],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99992226],PARAMETER["false_easting",500000],PARAMETER["false_northing",292209.579],AUTHORITY["EPSG","32061"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32062 + +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Guatemala Sur",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",14.9],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99989906],PARAMETER["false_easting",500000],PARAMETER["false_northing",325992.681],AUTHORITY["EPSG","32062"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32064 + +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 14N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32064"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32065 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 15N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32065"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32066 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 16N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32066"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32067 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 17N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32067"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32074 + +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 14N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32074"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32075 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 15N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32075"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32076 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 16N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32076"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32077 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / BLM 17N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32077"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32081 + +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 1",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32081"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32082 + +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 2",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32082"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32083 + +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 3",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32083"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32084 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 4",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32084"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32085 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 5",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32085"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32086 + +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / MTM zone 6",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32086"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32098 + +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs +PROJCS["NAD27 / Quebec Lambert",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32098"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32099 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs +PROJCS["NAD27 / Louisiana Offshore",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32099"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32100 + +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Montana",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32100"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32104 + +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Nebraska",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32104"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32107 + +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Nevada East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","32107"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32108 + +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Nevada Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","32108"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32109 + +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Nevada West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32109"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32110 + +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New Hampshire",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32110"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32111 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New Jersey",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32111"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32112 + +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New Mexico East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32112"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32113 + +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New Mexico Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32113"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32114 + +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New Mexico West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32114"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32115 + +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New York East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32115"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32116 + +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New York Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32116"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32117 + +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New York West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32117"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32118 + +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / New York Long Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32118"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32119 + +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / North Carolina",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","32119"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32120 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / North Dakota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32120"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32121 + +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / North Dakota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32121"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32122 + +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Ohio North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32122"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32123 + +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Ohio South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32123"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32124 + +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Oklahoma North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32124"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32125 + +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Oklahoma South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32125"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32126 + +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Oregon North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32126"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32127 + +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Oregon South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32127"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32128 + +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Pennsylvania North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32128"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32129 + +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Pennsylvania South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32129"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32130 + +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Rhode Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32130"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32133 + +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / South Carolina",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","32133"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32134 + +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / South Dakota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32134"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32135 + +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / South Dakota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32135"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32136 + +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Tennessee",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32136"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32137 + +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32137"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32138 + +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas North Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32138"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32139 + +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","32139"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32140 + +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32140"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32141 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Texas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","32141"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32142 + +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Utah North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32142"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32143 + +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Utah Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32143"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32144 + +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Utah South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","32144"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32145 + +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Vermont",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32145"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32146 + +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Virginia North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32146"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32147 + +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Virginia South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32147"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32148 + +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Washington North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32148"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32149 + +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Washington South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32149"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32150 + +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / West Virginia North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32150"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32151 + +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / West Virginia South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32151"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32152 + +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wisconsin North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32152"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32153 + +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wisconsin Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32153"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32154 + +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wisconsin South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32154"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32155 + +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wyoming East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32155"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32156 + +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wyoming East Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","32156"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32157 + +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wyoming West Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32157"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32158 + +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Wyoming West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","32158"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32161 + +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Puerto Rico & Virgin Is.",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","32161"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32164 + +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / BLM 14N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32164"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32165 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / BLM 15N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32165"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32166 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / BLM 16N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32166"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32167 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs +PROJCS["NAD83 / BLM 17N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32167"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32180 + +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / SCoPQ zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32180"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32181 + +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32181"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32182 + +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32182"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32183 + +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32183"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32184 + +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32184"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32185 + +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32185"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32186 + +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32186"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32187 + +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 7",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32187"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32188 + +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 8",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32188"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32189 + +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 9",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32189"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32190 + +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 10",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32190"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]] + + + 32191 + +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 11",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32192 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 12",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32193 + +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 13",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32194 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 14",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32194"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32195 + +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 15",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32196 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 16",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32196"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32197 + +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / MTM zone 17",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32197"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32198 + +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Quebec Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32198"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32199 + +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +PROJCS["NAD83 / Louisiana Offshore",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32199"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32201 + +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 1N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32202 + +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 2N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32203 + +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 3N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32204 + +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 4N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32204"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32205 + +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 5N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32205"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32206 + +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 6N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32206"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32207 + +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 7N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32207"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32208 + +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 8N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32208"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32209 + +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 9N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32209"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32210 + +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 10N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32210"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32211 + +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 11N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32211"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32212 + +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 12N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32212"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32213 + +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 13N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32214 + +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 14N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32215 + +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 15N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32216 + +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 16N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32217 + +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 17N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32218 + +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 18N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32218"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32219 + +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 19N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32220 + +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 20N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32221 + +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 21N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32222 + +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 22N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32222"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32223 + +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 23N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32223"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32224 + +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 24N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32224"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32225 + +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 25N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32225"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32226 + +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 26N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32226"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32227 + +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 27N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32227"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32228 + +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 28N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32228"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32229 + +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 29N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32229"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32230 + +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 30N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32230"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32231 + +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 31N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32232 + +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 32N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32233 + +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 33N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32233"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32234 + +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 34N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32235 + +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 35N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32236 + +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 36N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32237 + +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 37N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32238 + +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 38N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32238"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32239 + +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 39N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32240 + +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 40N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32241 + +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 41N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32241"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32242 + +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 42N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32242"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32243 + +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 43N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32243"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32244 + +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 44N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32244"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32245 + +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 45N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32245"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32246 + +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 46N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32246"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32247 + +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 47N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32247"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32248 + +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 48N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32249 + +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 49N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32250 + +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 50N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32251 + +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 51N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32252 + +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 52N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32253 + +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 53N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32254 + +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 54N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32255 + +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 55N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32256 + +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 56N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32257 + +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 57N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32258 + +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 58N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32259 + +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 59N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32260 + +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 60N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32301 + +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 1S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32301"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32302 + +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 2S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32302"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32303 + +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 3S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32303"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32304 + +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 4S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32304"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32305 + +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 5S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32306 + +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 6S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32307 + +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 7S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32307"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32308 + +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 8S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32309 + +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 9S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32309"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32310 + +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 10S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32310"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32311 + +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 11S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32312 + +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 12S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32313 + +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 13S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32314 + +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 14S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32315 + +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 15S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32316 + +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 16S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32317 + +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 17S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32317"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32318 + +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 18S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32319 + +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 19S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32319"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32320 + +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 20S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32320"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32321 + +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 21S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32321"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32322 + +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 22S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32322"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32323 + +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 23S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32323"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32324 + +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 24S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32324"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32325 + +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 25S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32325"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32326 + +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 26S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32326"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32327 + +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 27S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32327"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32328 + +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 28S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32328"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32329 + +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 29S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32329"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32330 + +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 30S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32330"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32331 + +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 31S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32331"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32332 + +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 32S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32333 + +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 33S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32333"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32334 + +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 34S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32334"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32335 + +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 35S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32335"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32336 + +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 36S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32336"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32337 + +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 37S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32337"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32338 + +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 38S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32338"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32339 + +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 39S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32340 + +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 40S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32341 + +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 41S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32341"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32342 + +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 42S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32343 + +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 43S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32344 + +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 44S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32345 + +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 45S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32346 + +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 46S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32346"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32347 + +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 47S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32348 + +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 48S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32349 + +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 49S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32350 + +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 50S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32351 + +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 51S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32352 + +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 52S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32353 + +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 53S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32354 + +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 54S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32355 + +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 55S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32356 + +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 56S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32357 + +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 57S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32358 + +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 58S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32359 + +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 59S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32359"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32360 + +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs +PROJCS["WGS 72 / UTM zone 60S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32360"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32401 + +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 1N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32401"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32402 + +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 2N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32402"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32403 + +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 3N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32403"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32404 + +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 4N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32404"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32405 + +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 5N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32405"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32406 + +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 6N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32406"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32407 + +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 7N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32407"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32408 + +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 8N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32408"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32409 + +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 9N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32409"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32410 + +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 10N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32410"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32411 + +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 11N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32411"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32412 + +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 12N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32412"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32413 + +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 13N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32413"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32414 + +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 14N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32414"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32415 + +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 15N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32415"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32416 + +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 16N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32416"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32417 + +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 17N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32417"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32418 + +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 18N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32418"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32419 + +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 19N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32419"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32420 + +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 20N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32420"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32421 + +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 21N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32421"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32422 + +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 22N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32422"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32423 + +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 23N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32423"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32424 + +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 24N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32424"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32425 + +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 25N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32425"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32426 + +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 26N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32426"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32427 + +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 27N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32427"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32428 + +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 28N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32428"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32429 + +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 29N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32429"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32430 + +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 30N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32430"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32431 + +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 31N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32431"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32432 + +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 32N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32432"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32433 + +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 33N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32433"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32434 + +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 34N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32434"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32435 + +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 35N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32435"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32436 + +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 36N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32436"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32437 + +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 37N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32437"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32438 + +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 38N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32438"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32439 + +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 39N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32440 + +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 40N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32441 + +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 41N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32441"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32442 + +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 42N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32442"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32443 + +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 43N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32443"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32444 + +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 44N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32444"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32445 + +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 45N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32445"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32446 + +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 46N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32446"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32447 + +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 47N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32447"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32448 + +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 48N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32448"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32449 + +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 49N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32449"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32450 + +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 50N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32450"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32451 + +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 51N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32451"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32452 + +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 52N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32452"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32453 + +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 53N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32453"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32454 + +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 54N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32454"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32455 + +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 55N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32455"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32456 + +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 56N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32456"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32457 + +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 57N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32457"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32458 + +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 58N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32458"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32459 + +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 59N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32459"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32460 + +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 60N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32460"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32501 + +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 1S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32501"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32502 + +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 2S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32502"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32503 + +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 3S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32503"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32504 + +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 4S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32504"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32505 + +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 5S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32505"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32506 + +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 6S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32506"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32507 + +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 7S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32507"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32508 + +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 8S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32508"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32509 + +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 9S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32509"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32510 + +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 10S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32510"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32511 + +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 11S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32511"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32512 + +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 12S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32512"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32513 + +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 13S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32513"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32514 + +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 14S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32514"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32515 + +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 15S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32515"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32516 + +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 16S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32516"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32517 + +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 17S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32517"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32518 + +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 18S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32518"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32519 + +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 19S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32519"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32520 + +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 20S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32520"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32521 + +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 21S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32521"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32522 + +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 22S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32522"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32523 + +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 23S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32523"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32524 + +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 24S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32524"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32525 + +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 25S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32525"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32526 + +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 26S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32526"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32527 + +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 27S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32527"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32528 + +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 28S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32528"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32529 + +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 29S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32529"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32530 + +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 30S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32530"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32531 + +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 31S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32531"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32532 + +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 32S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32532"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32533 + +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 33S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32533"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32534 + +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 34S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32534"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32535 + +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 35S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32535"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32536 + +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 36S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32536"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32537 + +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 37S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32537"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32538 + +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 38S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32538"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32539 + +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 39S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32539"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32540 + +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 40S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32540"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32541 + +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 41S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32541"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32542 + +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 42S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32542"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32543 + +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 43S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32543"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32544 + +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 44S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32544"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32545 + +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 45S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32545"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32546 + +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 46S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32546"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32547 + +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 47S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32547"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32548 + +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 48S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32548"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32549 + +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 49S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32549"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32550 + +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 50S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32550"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32551 + +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 51S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32551"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32552 + +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 52S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32552"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32553 + +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 53S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32553"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32554 + +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 54S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32554"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32555 + +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 55S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32555"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32556 + +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 56S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32556"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32557 + +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 57S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32557"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32558 + +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 58S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32558"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32559 + +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 59S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32559"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32560 + +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs +PROJCS["WGS 72BE / UTM zone 60S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32560"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32601 + +proj=utm +zone=1 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 1N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32601"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32602 + +proj=utm +zone=2 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 2N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32602"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32603 + +proj=utm +zone=3 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 3N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32603"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32604 + +proj=utm +zone=4 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 4N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32604"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32605 + +proj=utm +zone=5 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 5N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32605"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32606 + +proj=utm +zone=6 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 6N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32606"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32607 + +proj=utm +zone=7 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 7N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32607"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32608 + +proj=utm +zone=8 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 8N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32608"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32609 + +proj=utm +zone=9 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 9N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32609"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32610 + +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 10N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32610"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32611 + +proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 11N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32611"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32612 + +proj=utm +zone=12 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 12N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32612"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32613 + +proj=utm +zone=13 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 13N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32613"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32614 + +proj=utm +zone=14 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 14N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32614"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32615 + +proj=utm +zone=15 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 15N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32615"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32616 + +proj=utm +zone=16 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 16N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32616"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32617 + +proj=utm +zone=17 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 17N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32617"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32618 + +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 18N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32618"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32619 + +proj=utm +zone=19 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 19N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32619"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32620 + +proj=utm +zone=20 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 20N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32620"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32621 + +proj=utm +zone=21 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 21N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32621"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32622 + +proj=utm +zone=22 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 22N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32622"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32623 + +proj=utm +zone=23 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 23N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32623"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32624 + +proj=utm +zone=24 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 24N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32624"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32625 + +proj=utm +zone=25 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 25N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32625"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32626 + +proj=utm +zone=26 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 26N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32626"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32627 + +proj=utm +zone=27 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 27N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32627"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32628 + +proj=utm +zone=28 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 28N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32628"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32629 + +proj=utm +zone=29 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 29N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32629"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32630 + +proj=utm +zone=30 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 30N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32630"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32631 + +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 31N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32631"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32632 + +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 32N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32632"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32633 + +proj=utm +zone=33 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32633"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32634 + +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 34N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32634"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32635 + +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 35N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32635"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32636 + +proj=utm +zone=36 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 36N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32636"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32637 + +proj=utm +zone=37 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 37N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32637"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32638 + +proj=utm +zone=38 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 38N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32638"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32639 + +proj=utm +zone=39 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 39N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32639"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32640 + +proj=utm +zone=40 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 40N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32640"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32641 + +proj=utm +zone=41 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 41N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32641"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32642 + +proj=utm +zone=42 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 42N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32642"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32643 + +proj=utm +zone=43 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 43N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32643"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32644 + +proj=utm +zone=44 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 44N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32644"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32645 + +proj=utm +zone=45 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32645"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32646 + +proj=utm +zone=46 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 46N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32646"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32647 + +proj=utm +zone=47 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 47N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32647"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32648 + +proj=utm +zone=48 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 48N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32648"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32649 + +proj=utm +zone=49 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 49N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32649"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32650 + +proj=utm +zone=50 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 50N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32650"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32651 + +proj=utm +zone=51 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 51N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32651"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32652 + +proj=utm +zone=52 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 52N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32652"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32653 + +proj=utm +zone=53 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 53N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32653"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32654 + +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 54N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32654"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32655 + +proj=utm +zone=55 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 55N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32655"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32656 + +proj=utm +zone=56 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 56N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32656"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32657 + +proj=utm +zone=57 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 57N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32657"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32658 + +proj=utm +zone=58 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 58N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32658"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32659 + +proj=utm +zone=59 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 59N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32659"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32660 + +proj=utm +zone=60 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 60N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32660"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32661 + +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UPS North",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.994],PARAMETER["false_easting",2000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32661"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 32662 + +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / Plate Carree (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32662"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32664 + +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs +PROJCS["WGS 84 / BLM 14N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32664"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32665 + +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs +PROJCS["WGS 84 / BLM 15N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32665"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32666 + +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs +PROJCS["WGS 84 / BLM 16N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32666"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32667 + +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs +PROJCS["WGS 84 / BLM 17N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32667"],AXIS["X",EAST],AXIS["Y",NORTH]] + + + 32701 + +proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 1S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32701"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32702 + +proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 2S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32702"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32703 + +proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 3S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32703"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32704 + +proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 4S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32704"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32705 + +proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 5S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32705"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32706 + +proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 6S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32707 + +proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 7S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32708 + +proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 8S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32709 + +proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 9S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32710 + +proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 10S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32711 + +proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 11S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32712 + +proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 12S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32713 + +proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 13S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32714 + +proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 14S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32715 + +proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 15S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32716 + +proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 16S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32717 + +proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 17S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32718 + +proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 18S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32719 + +proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 19S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32720 + +proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 20S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32721 + +proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 21S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32722 + +proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 22S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32723 + +proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 23S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32723"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32724 + +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 24S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32724"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32725 + +proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 25S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32725"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32726 + +proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 26S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32726"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32727 + +proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 27S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32727"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32728 + +proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 28S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32728"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32729 + +proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 29S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32729"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32730 + +proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 30S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32730"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32731 + +proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 31S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32731"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32732 + +proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 32S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32732"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32733 + +proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 33S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32733"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32734 + +proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 34S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32734"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32735 + +proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 35S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32735"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32736 + +proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 36S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32736"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32737 + +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 37S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32737"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32738 + +proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 38S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32738"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32739 + +proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 39S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32739"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32740 + +proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 40S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32740"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32741 + +proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 41S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32741"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32742 + +proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 42S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32742"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32743 + +proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 43S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32743"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32744 + +proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 44S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32744"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32745 + +proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 45S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32745"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32746 + +proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 46S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32746"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32747 + +proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 47S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32747"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32748 + +proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 48S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32748"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32749 + +proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 49S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32749"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32750 + +proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 50S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32750"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32751 + +proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 51S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32751"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32752 + +proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 52S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32752"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32753 + +proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 53S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32753"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32754 + +proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 54S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32754"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32755 + +proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 55S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32755"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32756 + +proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 56S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32756"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32757 + +proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 57S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32757"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32758 + +proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 58S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32758"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32759 + +proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 59S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32759"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32760 + +proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UTM zone 60S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32760"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 32761 + +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / UPS South",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.994],PARAMETER["false_easting",2000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32761"],AXIS["Northing",NORTH],AXIS["Easting",EAST]] + + + 32766 + +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs +PROJCS["WGS 84 / TM 36 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32766"],AXIS["Easting",EAST],AXIS["Northing",NORTH]] + + + 900913 + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +PROJCS["Popular Visualisation CRS / Mercator (deprecated)",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["latitude_of_origin",0.0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","900913"],AXIS["X",EAST],AXIS["Y",NORTH]] + + diff --git a/Examples/DemoWebSite/Simple.aspx.cs b/Examples/DemoWebSite/Simple.aspx.cs index c4007eff..03c87acc 100644 --- a/Examples/DemoWebSite/Simple.aspx.cs +++ b/Examples/DemoWebSite/Simple.aspx.cs @@ -56,6 +56,6 @@ private void GenerateMap() //Render map Image img = myMap.GetMap(); string imgID = Caching.InsertIntoCache(1, img); - imgMap.ImageUrl = "getmap.aspx?ID=" + HttpUtility.UrlEncode(imgID); + imgMap.ImageUrl = "GetMap.aspx?ID=" + HttpUtility.UrlEncode(imgID); } -} \ No newline at end of file +} diff --git a/Examples/DemoWebSite/Web.Config b/Examples/DemoWebSite/Web.Config index ae8b1cdb..c2fc5823 100644 --- a/Examples/DemoWebSite/Web.Config +++ b/Examples/DemoWebSite/Web.Config @@ -24,13 +24,15 @@ - + @@ -81,6 +83,7 @@ + @@ -99,11 +102,11 @@ - + - + @@ -115,4 +118,4 @@ - \ No newline at end of file + diff --git a/Examples/DemoWebSite/packages.config b/Examples/DemoWebSite/packages.config index fe953f8f..99450662 100644 --- a/Examples/DemoWebSite/packages.config +++ b/Examples/DemoWebSite/packages.config @@ -2,9 +2,12 @@ - - - - - + + + + + + + + \ No newline at end of file diff --git a/Examples/DemoWinForm/DemoWinForm.csproj b/Examples/DemoWinForm/DemoWinForm.csproj index 9f038375..46390c7f 100644 --- a/Examples/DemoWinForm/DemoWinForm.csproj +++ b/Examples/DemoWinForm/DemoWinForm.csproj @@ -63,21 +63,20 @@ 4 - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/Examples/DemoWinForm/packages.config b/Examples/DemoWinForm/packages.config index b109dde2..fadc5bc6 100644 --- a/Examples/DemoWinForm/packages.config +++ b/Examples/DemoWinForm/packages.config @@ -1,6 +1,10 @@  - - - + + + + + + + \ No newline at end of file diff --git a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj index 21cfe2e3..d6108958 100644 --- a/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj +++ b/Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj @@ -56,21 +56,26 @@ ..\..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll True - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\..\packages\NetTopologySuite.IO.GeoJSON.1.14\lib\net40-client\NetTopologySuite.IO.GeoJSON.dll - True + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll - True + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + ..\..\packages\NetTopologySuite.Features.1.15.0\lib\net40-client\NetTopologySuite.Features.dll + + + ..\..\packages\NetTopologySuite.IO.GeoJSON.1.15.0\lib\net40-client\NetTopologySuite.IO.GeoJSON.dll + + + ..\..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll False @@ -84,13 +89,8 @@ ..\..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll True - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/Examples/ExampleCodeSnippets/app.config b/Examples/ExampleCodeSnippets/app.config index 6638ccf6..16547c68 100644 --- a/Examples/ExampleCodeSnippets/app.config +++ b/Examples/ExampleCodeSnippets/app.config @@ -14,11 +14,11 @@ - + - + diff --git a/Examples/ExampleCodeSnippets/packages.config b/Examples/ExampleCodeSnippets/packages.config index 66489c57..488688ea 100644 --- a/Examples/ExampleCodeSnippets/packages.config +++ b/Examples/ExampleCodeSnippets/packages.config @@ -3,10 +3,15 @@ - - - - + + + + + + + + + - + \ No newline at end of file diff --git a/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj b/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj index 577db7b2..bd3093c7 100644 --- a/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj +++ b/Examples/ExampleCodeSnipplets.VB/ExampleCodeSnipplets.VB.vbproj @@ -45,17 +45,17 @@ On - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/Examples/ExampleCodeSnipplets.VB/app.config b/Examples/ExampleCodeSnipplets.VB/app.config index df5997f3..4440d9e0 100644 --- a/Examples/ExampleCodeSnipplets.VB/app.config +++ b/Examples/ExampleCodeSnipplets.VB/app.config @@ -4,11 +4,11 @@ - + - + diff --git a/Examples/ExampleCodeSnipplets.VB/packages.config b/Examples/ExampleCodeSnipplets.VB/packages.config index cd16975f..29b6ed10 100644 --- a/Examples/ExampleCodeSnipplets.VB/packages.config +++ b/Examples/ExampleCodeSnipplets.VB/packages.config @@ -1,5 +1,9 @@  - - + + + + + + \ No newline at end of file diff --git a/Examples/GtkFormSamples/Main.cs b/Examples/GtkFormSamples/Main.cs index aceffa44..78b2f644 100644 --- a/Examples/GtkFormSamples/Main.cs +++ b/Examples/GtkFormSamples/Main.cs @@ -1,14 +1,40 @@ +using System; +using System.Configuration; +using System.IO; +using System.Text; + namespace TestGtk { class MainClass { public static void Main (string[] args) { - Gtk.Application.Init(); - MainWindow win = new MainWindow (); - win.Show (); - Gtk.Application.Run(); + PrepareEnvironment(); + + Gtk.Application.Init(); + + using (var win = new MainWindow()) + win.Show(); + + Gtk.Application.Run(); } + + private static void PrepareEnvironment() + { + var asr = new AppSettingsReader(); + var msysDir = new StringBuilder((string) asr.GetValue("MSYS2InstallDir", typeof(string))); + if (!msysDir.ToString().EndsWith("\\")) msysDir.Append('\\'); + if (IntPtr.Size == 4) + msysDir.AppendFormat("mingw32\\bin"); + else + msysDir.AppendFormat("mingw64\\bin"); + + if (!Directory.Exists(msysDir.ToString())) + throw new Exception("MSYS INSTALLATION DIR NOT FOUND"); + + msysDir.AppendFormat(";{0}", Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process)); + Environment.SetEnvironmentVariable("PATH", msysDir.ToString(), EnvironmentVariableTarget.Process); + } } } diff --git a/Examples/GtkFormSamples/TestGtk.csproj b/Examples/GtkFormSamples/TestGtk.csproj index c6d841fe..f8d72880 100644 --- a/Examples/GtkFormSamples/TestGtk.csproj +++ b/Examples/GtkFormSamples/TestGtk.csproj @@ -1,5 +1,5 @@  - + Debug x86 @@ -9,7 +9,28 @@ WinExe TestGtk TestGtk - v3.5 + v4.7.1 + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true true @@ -21,6 +42,7 @@ 4 x86 false + false none @@ -30,46 +52,64 @@ 4 x86 false + false + + + true + bin\Debug\ + DEBUG + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + bin\Release\ + AnyCPU + prompt + MinimumRecommendedRules.ruleset - - False - ..\Packages\GeoAPI.1.6.0\lib\net35\GeoAPI.dll + + packages\AtkSharp.3.22.24.36\lib\netstandard2.0\AtkSharp.dll - - False - ..\Packages\NetTopologySuite.1.12.0\lib\net35\NetTopologySuite.dll + + packages\CairoSharp.3.22.24.36\lib\netstandard2.0\CairoSharp.dll - - False - ..\Packages\NetTopologySuite.1.12.0\lib\net35\PowerCollections.dll + + ..\..\SharpMap\bin\$(Configuration)\Common.Logging.dll - - - False - gtk-sharp-2.0 + + ..\..\SharpMap\bin\$(Configuration)\Common.Logging.Core.dll + + + packages\GdkSharp.3.22.24.36\lib\netstandard2.0\GdkSharp.dll + + + packages\GeoAPI.Core.1.7.5\lib\net45\GeoAPI.dll - - False - gtk-sharp-2.0 + + packages\GeoAPI.CoordinateSystems.1.7.5\lib\net45\GeoAPI.CoordinateSystems.dll - - False - glib-sharp-2.0 + + packages\GioSharp.3.22.24.36\lib\netstandard2.0\GioSharp.dll - - False - glade-sharp-2.0 + + packages\GLibSharp.3.22.24.36\lib\netstandard2.0\GLibSharp.dll - - False - gtk-sharp-2.0 + + packages\GtkSharp.3.22.24.36\lib\netstandard2.0\GtkSharp.dll - - False - gtk-sharp-2.0 + + packages\NetTopologySuite.Core.1.15.1\lib\net45\NetTopologySuite.dll - + + packages\PangoSharp.3.22.24.36\lib\netstandard2.0\PangoSharp.dll + + + ..\..\SharpMap\bin\$(Configuration)\SharpMap.dll + + @@ -85,6 +125,7 @@ + PreserveNewest @@ -108,13 +149,15 @@ + - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap.VS2008 - + + False + .NET Framework 3.5 SP1 + true + \ No newline at end of file diff --git a/Examples/GtkFormSamples/TestGtk.sln b/Examples/GtkFormSamples/TestGtk.sln index 962909b1..29612848 100644 --- a/Examples/GtkFormSamples/TestGtk.sln +++ b/Examples/GtkFormSamples/TestGtk.sln @@ -1,18 +1,26 @@  -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2047 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestGtk", "TestGtk.csproj", "{D8C31343-91DA-463B-95E0-47C60B1D0FBF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Debug|x86.ActiveCfg = Debug|x86 - {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Debug|x86.Build.0 = Debug|x86 - {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Release|x86.ActiveCfg = Release|x86 - {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Release|x86.Build.0 = Release|x86 + {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8C31343-91DA-463B-95E0-47C60B1D0FBF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {772188AB-3132-4513-AF6A-4BAE7BBA01ED} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = TestGtk.csproj diff --git a/Examples/GtkFormSamples/app.config b/Examples/GtkFormSamples/app.config new file mode 100644 index 00000000..262bb12e --- /dev/null +++ b/Examples/GtkFormSamples/app.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Examples/GtkFormSamples/gtk-gui/MainWindow.cs b/Examples/GtkFormSamples/gtk-gui/MainWindow.cs index ddc35527..a29b9509 100644 --- a/Examples/GtkFormSamples/gtk-gui/MainWindow.cs +++ b/Examples/GtkFormSamples/gtk-gui/MainWindow.cs @@ -24,7 +24,7 @@ protected virtual void Build() global::Stetic.Gui.Initialize(this); // Widget MainWindow this.Name = "MainWindow"; - this.Title = global::Mono.Unix.Catalog.GetString("MainWindow"); + this.Title = "MainWindow"; this.WindowPosition = ((global::Gtk.WindowPosition) (4)); // Container child MainWindow.Gtk.Container+ContainerChild this.fixed1 = new global::Gtk.Fixed(); @@ -47,24 +47,24 @@ protected virtual void Build() // Container child fixed1.Gtk.Fixed+FixedChild this.label1 = new global::Gtk.Label(); this.label1.Name = "label1"; - this.label1.LabelProp = global::Mono.Unix.Catalog.GetString("Map x,y"); + this.label1.LabelProp = "Map x,y"; this.fixed1.Add(this.label1); global::Gtk.Fixed.FixedChild w3 = ((global::Gtk.Fixed.FixedChild) (this.fixed1[this.label1])); w3.X = 695; w3.Y = 19; // Container child fixed1.Gtk.Fixed+FixedChild - this.radZoomIn = new global::Gtk.RadioButton(global::Mono.Unix.Catalog.GetString("Zoom In")); + this.radZoomIn = new global::Gtk.RadioButton("Zoom In"); this.radZoomIn.CanFocus = true; this.radZoomIn.Name = "radZoomIn"; this.radZoomIn.DrawIndicator = true; this.radZoomIn.UseUnderline = true; - this.radZoomIn.Group = new global::GLib.SList(global::System.IntPtr.Zero); + this.radZoomIn.Group = null;; this.fixed1.Add(this.radZoomIn); global::Gtk.Fixed.FixedChild w4 = ((global::Gtk.Fixed.FixedChild) (this.fixed1[this.radZoomIn])); w4.X = 306; w4.Y = 13; // Container child fixed1.Gtk.Fixed+FixedChild - this.radPan = new global::Gtk.RadioButton(global::Mono.Unix.Catalog.GetString("Pan")); + this.radPan = new global::Gtk.RadioButton("Pan"); this.radPan.CanFocus = true; this.radPan.Name = "radPan"; this.radPan.DrawIndicator = true; @@ -75,7 +75,7 @@ protected virtual void Build() w5.X = 242; w5.Y = 13; // Container child fixed1.Gtk.Fixed+FixedChild - this.radZoomOut = new global::Gtk.RadioButton(global::Mono.Unix.Catalog.GetString("Zoom Out")); + this.radZoomOut = new global::Gtk.RadioButton("Zoom Out"); this.radZoomOut.CanFocus = true; this.radZoomOut.Name = "radZoomOut"; this.radZoomOut.DrawIndicator = true; @@ -97,4 +97,4 @@ protected virtual void Build() this.eventbox1.ButtonPressEvent += new global::Gtk.ButtonPressEventHandler(this.EventBoxButtonPress); } } -} \ No newline at end of file +} diff --git a/Examples/GtkFormSamples/packages.config b/Examples/GtkFormSamples/packages.config new file mode 100644 index 00000000..81181639 --- /dev/null +++ b/Examples/GtkFormSamples/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/SharpMap.Demo.Wms/App_Data/nyc/poi.shp.sidx b/Examples/SharpMap.Demo.Wms/App_Data/nyc/poi.shp.sidx new file mode 100644 index 0000000000000000000000000000000000000000..2dffb96104617fb6ab5560227951e227003ceabe GIT binary patch literal 331 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

0SR&Rqii*=OyrT|J30(?z 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

  • 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 literal 0 HcmV?d00001 diff --git a/Examples/SharpMap.Demo.Wms/Handlers/StdJsonMapHandler.cs b/Examples/SharpMap.Demo.Wms/Handlers/StdJsonMapHandler.cs index a871e8dc..5caac04b 100644 --- a/Examples/SharpMap.Demo.Wms/Handlers/StdJsonMapHandler.cs +++ b/Examples/SharpMap.Demo.Wms/Handlers/StdJsonMapHandler.cs @@ -59,7 +59,10 @@ public override void ProcessRequest(HttpContext context) context.Response.ContentType = "text/json"; context.Response.BufferOutput = true; context.Response.Write(buffer); - context.Response.End(); + context.Response.Flush(); + context.Response.SuppressContent = true; + context.ApplicationInstance.CompleteRequest(); + //context.Response.End(); } catch (Exception ex) { @@ -119,4 +122,4 @@ private static IEnumerable QueryData(BoundingBox bbox, ICanQueryLayer l return data; } } -} \ No newline at end of file +} diff --git a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj index 9c878694..f2d51024 100644 --- a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj +++ b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj @@ -26,6 +26,7 @@ ..\..\ true + true @@ -49,25 +50,23 @@ false - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll - True + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll + + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/Examples/SharpMap.Demo.Wms/packages.config b/Examples/SharpMap.Demo.Wms/packages.config index ef6595c0..bcdc4d92 100644 --- a/Examples/SharpMap.Demo.Wms/packages.config +++ b/Examples/SharpMap.Demo.Wms/packages.config @@ -1,12 +1,16 @@  - + + + - - - + + + + + \ No newline at end of file diff --git a/Examples/WPFSamples/WPFSamples.csproj b/Examples/WPFSamples/WPFSamples.csproj index ca1c5d48..b644e7f1 100644 --- a/Examples/WPFSamples/WPFSamples.csproj +++ b/Examples/WPFSamples/WPFSamples.csproj @@ -40,13 +40,14 @@ ..\..\packages\BruTile.0.18.1\lib\net40\BruTile.dll True - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/Examples/WPFSamples/packages.config b/Examples/WPFSamples/packages.config index b86b1c89..85dc1b82 100644 --- a/Examples/WPFSamples/packages.config +++ b/Examples/WPFSamples/packages.config @@ -1,6 +1,8 @@  - - + + + + \ No newline at end of file diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index 7836c0ec..ce5ab871 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -89,41 +89,21 @@ ..\..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll True - - ..\..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll ..\..\packages\log4net.2.0.0\lib\net40-full\log4net.dll True - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.dll - True - - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.GeoTools.dll - True - - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.MsSqlSpatial.dll - True - - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.PostGis.dll - True - - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.dll - True - - - ..\..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.Extended.dll - True + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll ..\..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll @@ -133,13 +113,8 @@ ..\..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll True - - ..\..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - - - ..\..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/Examples/WinFormSamples/app.config b/Examples/WinFormSamples/app.config index aa1a86e1..fcb8694c 100644 --- a/Examples/WinFormSamples/app.config +++ b/Examples/WinFormSamples/app.config @@ -61,11 +61,11 @@ - + - + diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index 10f7fdfe..ac51939e 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -7,10 +7,13 @@ - + + + - - - + + + + \ No newline at end of file diff --git a/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj b/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj index 90ca7423..659c6270 100644 --- a/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj +++ b/SharpMap.Converters.GeoJSON/SharpMap.Converters.GeoJSON.csproj @@ -32,13 +32,14 @@ bin\Release\SharpMap.Converters.GeoJSON.XML - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll @@ -63,6 +64,7 @@ + diff --git a/SharpMap.Converters.GeoJSON/app.config b/SharpMap.Converters.GeoJSON/app.config new file mode 100644 index 00000000..9b3c563d --- /dev/null +++ b/SharpMap.Converters.GeoJSON/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap.Converters.GeoJSON/packages.config b/SharpMap.Converters.GeoJSON/packages.config index 8f5a0507..19946912 100644 --- a/SharpMap.Converters.GeoJSON/packages.config +++ b/SharpMap.Converters.GeoJSON/packages.config @@ -1,5 +1,7 @@  - - + + + + \ No newline at end of file diff --git a/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj b/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj index 677978d7..a0049d96 100644 --- a/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj +++ b/SharpMap.Converters.Spatialite/SharpMap.Converters.Spatialite.csproj @@ -32,9 +32,11 @@ bin\Release\SharpMap.Converters.Spatialite.XML - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll diff --git a/SharpMap.Converters.Spatialite/packages.config b/SharpMap.Converters.Spatialite/packages.config index 58053a3d..b3c78a62 100644 --- a/SharpMap.Converters.Spatialite/packages.config +++ b/SharpMap.Converters.Spatialite/packages.config @@ -1,4 +1,6 @@  - + + + \ No newline at end of file diff --git a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj index 375e686c..3dd707cb 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj +++ b/SharpMap.CoordinateSystems.DotSpatial/SharpMap.CoordinateSystems.DotSpatial.csproj @@ -36,9 +36,11 @@ ..\packages\DotSpatial.Projections.1.9\lib\net40-Client\DotSpatial.Projections.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll diff --git a/SharpMap.CoordinateSystems.DotSpatial/packages.config b/SharpMap.CoordinateSystems.DotSpatial/packages.config index 2548de3c..d2b51255 100644 --- a/SharpMap.CoordinateSystems.DotSpatial/packages.config +++ b/SharpMap.CoordinateSystems.DotSpatial/packages.config @@ -1,5 +1,7 @@  - + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj b/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj index 940c4c98..c03b337d 100644 --- a/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj +++ b/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj @@ -54,22 +54,22 @@ MinimumRecommendedRules.ruleset - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll False ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - diff --git a/SharpMap.Data.Providers.FileGdb/packages.config b/SharpMap.Data.Providers.FileGdb/packages.config index 0b47047d..3a84b310 100644 --- a/SharpMap.Data.Providers.FileGdb/packages.config +++ b/SharpMap.Data.Providers.FileGdb/packages.config @@ -1,6 +1,10 @@  - - + + + + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj b/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj index e1f83052..007e8b02 100644 --- a/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj +++ b/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj @@ -45,17 +45,17 @@ ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/SharpMap.Data.Providers.GeoPackage/packages.config b/SharpMap.Data.Providers.GeoPackage/packages.config index cbe0cfd9..a3b7b47c 100644 --- a/SharpMap.Data.Providers.GeoPackage/packages.config +++ b/SharpMap.Data.Providers.GeoPackage/packages.config @@ -2,7 +2,11 @@ - - + + + + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj b/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj index 5d7cb068..0bcee4f6 100644 --- a/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj +++ b/SharpMap.Data.Providers.Kml/SharpMap.Data.Providers.Kml.csproj @@ -33,24 +33,23 @@ bin\Release\SharpMap.Data.Providers.Kml.XML - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll ..\packages\DotNetZip.Reduced.1.9.1.8\lib\net20\Ionic.Zip.Reduced.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll ..\packages\SharpKml.Core.2.1.3\lib\portable-net4+sl5+wp8+win8\SharpKml.dll diff --git a/SharpMap.Data.Providers.Kml/packages.config b/SharpMap.Data.Providers.Kml/packages.config index d798202f..85557ef7 100644 --- a/SharpMap.Data.Providers.Kml/packages.config +++ b/SharpMap.Data.Providers.Kml/packages.config @@ -1,9 +1,13 @@  - - - + + + + + + + \ No newline at end of file diff --git a/SharpMap.Data.Providers.OracleSpatial/SharpMap.Data.Providers.OracleSpatial.csproj b/SharpMap.Data.Providers.OracleSpatial/SharpMap.Data.Providers.OracleSpatial.csproj index 035c8f8c..e0b662b1 100644 --- a/SharpMap.Data.Providers.OracleSpatial/SharpMap.Data.Providers.OracleSpatial.csproj +++ b/SharpMap.Data.Providers.OracleSpatial/SharpMap.Data.Providers.OracleSpatial.csproj @@ -38,13 +38,17 @@ false - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll ..\packages\odp.net.x86.112.3.20\lib\net40\Oracle.DataAccess.dll @@ -52,10 +56,6 @@ ..\packages\odac.client.x86.1.112.3.20\lib\net40\Oracle.Web.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - diff --git a/SharpMap.Data.Providers.OracleSpatial/packages.config b/SharpMap.Data.Providers.OracleSpatial/packages.config index b974c9b6..0b8fd3c7 100644 --- a/SharpMap.Data.Providers.OracleSpatial/packages.config +++ b/SharpMap.Data.Providers.OracleSpatial/packages.config @@ -1,7 +1,11 @@  - - + + + + + + \ No newline at end of file diff --git a/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj b/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj index 02a0e83d..1ecae41d 100644 --- a/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj +++ b/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj @@ -46,17 +46,17 @@ ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/SharpMap.Extensions.x86/app.config b/SharpMap.Extensions.x86/app.config index 707452f1..85bcf0a5 100644 --- a/SharpMap.Extensions.x86/app.config +++ b/SharpMap.Extensions.x86/app.config @@ -8,11 +8,11 @@ - + - + diff --git a/SharpMap.Extensions.x86/packages.config b/SharpMap.Extensions.x86/packages.config index 93db6ad1..89bbe54b 100644 --- a/SharpMap.Extensions.x86/packages.config +++ b/SharpMap.Extensions.x86/packages.config @@ -2,7 +2,11 @@ - - + + + + + + \ No newline at end of file diff --git a/SharpMap.Extensions/Data/Providers/NtsProvider.cs b/SharpMap.Extensions/Data/Providers/NtsProvider.cs index ddfceeaa..320a7123 100644 --- a/SharpMap.Extensions/Data/Providers/NtsProvider.cs +++ b/SharpMap.Extensions/Data/Providers/NtsProvider.cs @@ -228,7 +228,7 @@ private void BuildFromProvider(IProvider provider) // throw new ApplicationException("Null values not supported"); var value = dataRow[column]; if (value is DBNull) value = null; - attributes.AddAttribute(column.ColumnName, value); + attributes.Add(column.ColumnName, value); } _features.Add(new Feature(geometry, attributes)); } @@ -433,4 +433,4 @@ public void GetFeaturesInView(BoundingBox bbox, FeatureDataSet ds) ExecuteIntersectionQuery(bbox, ds); } } -} \ No newline at end of file +} diff --git a/SharpMap.Extensions/Data/Providers/OgrProvider.cs b/SharpMap.Extensions/Data/Providers/OgrProvider.cs index 6f360424..ea97c200 100644 --- a/SharpMap.Extensions/Data/Providers/OgrProvider.cs +++ b/SharpMap.Extensions/Data/Providers/OgrProvider.cs @@ -1054,7 +1054,7 @@ private IGeometry ReadWkb(OgrGeometryType type, OgrGeometry geom) private IGeometry ReadLineString(OgrGeometryType type, OgrGeometry geom) { var count = geom.GetPointCount(); - var dimension = geom.GetDimension(); + var dimension = geom.GetCoordinateDimension(); var cs = _factory.CoordinateSequenceFactory.Create(count, dimension); if (dimension > 2) @@ -1071,7 +1071,7 @@ private IGeometry ReadLineString(OgrGeometryType type, OgrGeometry geom) cs.SetOrdinate(i, Ordinate.Y, geom.GetY(i)); } - return _factory.CreateLinearRing(cs); + return _factory.CreateLineString(cs); } private IGeometry ReadPoint(OgrGeometryType type, OgrGeometry geom) diff --git a/SharpMap.Extensions/SharpMap.Extensions.csproj b/SharpMap.Extensions/SharpMap.Extensions.csproj index 4d1bbf9b..fb38fb3c 100644 --- a/SharpMap.Extensions/SharpMap.Extensions.csproj +++ b/SharpMap.Extensions/SharpMap.Extensions.csproj @@ -60,45 +60,33 @@ ..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll True - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.dll - True + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.GeoTools.dll - True + + ..\packages\NetTopologySuite.Features.1.15.0\lib\net40\NetTopologySuite.Features.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.MsSqlSpatial.dll - True + + ..\packages\NetTopologySuite.IO.PostGis.1.15.0\lib\net40-client\NetTopologySuite.IO.PostGis.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.PostGis.dll - True + + ..\packages\NetTopologySuite.IO.SpatiaLite.1.15.0\lib\net40-client\NetTopologySuite.IO.SpatiaLite.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.dll - True - - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.Extended.dll - True - - - ..\packages\NetTopologySuite.IO.SpatiaLite.1.14\lib\net40-client\NetTopologySuite.IO.SpatiaLite.dll - True + + ..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll @@ -112,13 +100,8 @@ ..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll True - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - - - ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll @@ -131,6 +114,7 @@ ..\packages\Oracle.ManagedDataAccess.12.1.2400\lib\net40\Oracle.ManagedDataAccess.dll + diff --git a/SharpMap.Extensions/app.config b/SharpMap.Extensions/app.config index c2e2688e..b088517f 100644 --- a/SharpMap.Extensions/app.config +++ b/SharpMap.Extensions/app.config @@ -16,11 +16,11 @@ - + - + diff --git a/SharpMap.Extensions/packages.config b/SharpMap.Extensions/packages.config index 1feb96da..f10534fa 100644 --- a/SharpMap.Extensions/packages.config +++ b/SharpMap.Extensions/packages.config @@ -3,12 +3,18 @@ - - - - + + + + + + + + + + - + \ No newline at end of file diff --git a/SharpMap.Layers.BruTile/Layers/TileAsyncLayer.cs b/SharpMap.Layers.BruTile/Layers/TileAsyncLayer.cs index 65bc918e..62d45fba 100644 --- a/SharpMap.Layers.BruTile/Layers/TileAsyncLayer.cs +++ b/SharpMap.Layers.BruTile/Layers/TileAsyncLayer.cs @@ -132,7 +132,7 @@ public override void Render(Graphics graphics, MapViewport map) { var bbox = map.Envelope; var extent = new Extent(bbox.MinX, bbox.MinY, bbox.MaxX, bbox.MaxY); - var level = BruTile.Utilities.GetNearestLevel(_source.Schema.Resolutions, map.PixelSize); + var level = BruTile.Utilities.GetNearestLevel(_source.Schema.Resolutions, Math.Max(map.PixelWidth, map.PixelHeight)); var tiles = _source.Schema.GetTileInfos(extent, level); //Abort previous running Threads diff --git a/SharpMap.Layers.BruTile/Layers/TileLayer.cs b/SharpMap.Layers.BruTile/Layers/TileLayer.cs index 525da955..6750873d 100644 --- a/SharpMap.Layers.BruTile/Layers/TileLayer.cs +++ b/SharpMap.Layers.BruTile/Layers/TileLayer.cs @@ -180,7 +180,7 @@ public override void Render(Graphics graphics, MapViewport map) var extent = new Extent(map.Envelope.MinX, map.Envelope.MinY, map.Envelope.MaxX, map.Envelope.MaxY); - var level = BruTile.Utilities.GetNearestLevel(_source.Schema.Resolutions, map.PixelSize); + var level = BruTile.Utilities.GetNearestLevel(_source.Schema.Resolutions, Math.Max(map.PixelWidth, map.PixelHeight)); var tiles = new List(_source.Schema.GetTileInfos(extent, level)); var tileWidth = _source.Schema.GetTileWidth(level); var tileHeight = _source.Schema.GetTileWidth(level); diff --git a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj index cc865e45..ae9ceb7b 100644 --- a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj +++ b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj @@ -53,9 +53,11 @@ ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll diff --git a/SharpMap.Layers.BruTile/packages.config b/SharpMap.Layers.BruTile/packages.config index 00893350..45aafcef 100644 --- a/SharpMap.Layers.BruTile/packages.config +++ b/SharpMap.Layers.BruTile/packages.config @@ -4,6 +4,8 @@ - + + + \ No newline at end of file diff --git a/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj b/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj index a2d11a67..ee68009f 100644 --- a/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj +++ b/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj @@ -36,17 +36,17 @@ false - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/SharpMap.Layers.HeatLayer/packages.config b/SharpMap.Layers.HeatLayer/packages.config index cb31f51e..1a9735ad 100644 --- a/SharpMap.Layers.HeatLayer/packages.config +++ b/SharpMap.Layers.HeatLayer/packages.config @@ -1,5 +1,9 @@  - - + + + + + + \ No newline at end of file diff --git a/SharpMap.Serialization/SharpMap.Serialization.csproj b/SharpMap.Serialization/SharpMap.Serialization.csproj index 7277454b..ea4a9808 100644 --- a/SharpMap.Serialization/SharpMap.Serialization.csproj +++ b/SharpMap.Serialization/SharpMap.Serialization.csproj @@ -47,9 +47,11 @@ ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll diff --git a/SharpMap.Serialization/app.config b/SharpMap.Serialization/app.config index 5461b89a..85bcf0a5 100644 --- a/SharpMap.Serialization/app.config +++ b/SharpMap.Serialization/app.config @@ -8,11 +8,11 @@ - + - + diff --git a/SharpMap.Serialization/packages.config b/SharpMap.Serialization/packages.config index eb1fd68b..e0f96776 100644 --- a/SharpMap.Serialization/packages.config +++ b/SharpMap.Serialization/packages.config @@ -3,5 +3,7 @@ - + + + \ No newline at end of file diff --git a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj index bff54ccf..e354d645 100644 --- a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj +++ b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj @@ -37,21 +37,21 @@ false - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll False C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/SharpMap.SqlServerSpatialObjects/packages.config b/SharpMap.SqlServerSpatialObjects/packages.config index cb31f51e..1a9735ad 100644 --- a/SharpMap.SqlServerSpatialObjects/packages.config +++ b/SharpMap.SqlServerSpatialObjects/packages.config @@ -1,5 +1,9 @@  - - + + + + + + \ No newline at end of file diff --git a/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj b/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj index 0fed97f7..fabb3d51 100644 --- a/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj +++ b/SharpMap.UI.WPF/SharpMap.UI.WPF.csproj @@ -35,9 +35,11 @@ bin\Release\SharpMap.UI.WPF.XML - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll diff --git a/SharpMap.UI.WPF/packages.config b/SharpMap.UI.WPF/packages.config index 12842b65..b3c78a62 100644 --- a/SharpMap.UI.WPF/packages.config +++ b/SharpMap.UI.WPF/packages.config @@ -1,4 +1,6 @@  - + + + \ No newline at end of file diff --git a/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs index 551e34e9..b60e9e67 100644 --- a/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs +++ b/SharpMap.UI/Forms/ImageGenerator/LayerListImageGenerator.cs @@ -138,8 +138,7 @@ private void HandleVariableLayersRequery(object sender, EventArgs e) // map.DisposeLayersOnDispose = false; - var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), - map.Size, map.PixelAspectRatio, map.MapTransform); + var mvp = new MapViewport(map); foreach (var lyr in Map.VariableLayers) { //new Task(RenderLayerImage, new object[] {lyr, mvp, _cts.Token }).Start(); @@ -301,8 +300,7 @@ public void Generate() //{ // map.DisposeLayersOnDispose = false; - var mvp = new MapViewport(map.ID, map.SRID, new Envelope(map.Envelope), - map.Size, map.PixelAspectRatio, map.MapTransform); + var mvp = new MapViewport(map); //var tasks = new List(); var tf = new TaskFactory(); diff --git a/SharpMap.UI/Forms/ToolBar/MapQueryToolStrip.cs b/SharpMap.UI/Forms/ToolBar/MapQueryToolStrip.cs index c4fbb52a..f1c3dd99 100644 --- a/SharpMap.UI/Forms/ToolBar/MapQueryToolStrip.cs +++ b/SharpMap.UI/Forms/ToolBar/MapQueryToolStrip.cs @@ -164,7 +164,7 @@ private void OnMapControlActiveToolChanged(MapBox.Tools tool) if (MapControl == null) return; switch (tool) { - case MapBox.Tools.QueryGeometry: + case MapBox.Tools.QueryPoint: _queryGeometry.Checked = true; _queryWindow.Checked = false; break; @@ -259,7 +259,7 @@ private void OnCheckedChanged(object sender, EventArgs e) if (sender == _queryWindow) newTool = MapBox.Tools.QueryBox; else if (sender == _queryGeometry) - newTool = MapBox.Tools.QueryGeometry; + newTool = MapBox.Tools.QueryPoint; else { if (Logger.IsWarnEnabled) diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index 1d4cf2c1..81662a4a 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -49,21 +49,20 @@ ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll diff --git a/SharpMap.UI/packages.config b/SharpMap.UI/packages.config index 583aef93..5cad9f73 100644 --- a/SharpMap.UI/packages.config +++ b/SharpMap.UI/packages.config @@ -2,8 +2,12 @@ - - - + + + + + + + \ No newline at end of file diff --git a/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj b/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj index 8957fb8f..71cabf19 100644 --- a/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj +++ b/SharpMap.Utilities.Indexing.SbnTree/SharpMap.Utilities.Indexing.SbnTree.csproj @@ -33,12 +33,11 @@ bin\Release\SharpMap.Utilities.Indexing.SbnTree.XML - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\SharpSbn.GeoAPI.1.0.1\lib\net40-client\SharpSbn.GeoAPI.dll + + ..\packages\SharpSbn.GeoAPI.1.2.0\lib\net40-client\SharpSbn.GeoAPI.dll diff --git a/SharpMap.Utilities.Indexing.SbnTree/app.config b/SharpMap.Utilities.Indexing.SbnTree/app.config index 51c6fbfa..2d624785 100644 --- a/SharpMap.Utilities.Indexing.SbnTree/app.config +++ b/SharpMap.Utilities.Indexing.SbnTree/app.config @@ -1,15 +1,3 @@  - - - - - - - - - - - - diff --git a/SharpMap.Utilities.Indexing.SbnTree/packages.config b/SharpMap.Utilities.Indexing.SbnTree/packages.config index 5b8fa24f..a71c0596 100644 --- a/SharpMap.Utilities.Indexing.SbnTree/packages.config +++ b/SharpMap.Utilities.Indexing.SbnTree/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file diff --git a/SharpMap.Web/SharpMap.Web.csproj b/SharpMap.Web/SharpMap.Web.csproj index 1b08f470..09a07db3 100644 --- a/SharpMap.Web/SharpMap.Web.csproj +++ b/SharpMap.Web/SharpMap.Web.csproj @@ -36,13 +36,14 @@ false - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll diff --git a/SharpMap.Web/Web/Cache.cs b/SharpMap.Web/Web/Cache.cs index bc93005e..0a2e8618 100644 --- a/SharpMap.Web/Web/Cache.cs +++ b/SharpMap.Web/Web/Cache.cs @@ -37,7 +37,7 @@ public class Caching /// This requires you to add the following to web.config: /// /// - /// + /// /// /// /// @@ -65,4 +65,4 @@ public static string InsertIntoCache(int minutes, Image map) return guid; } } -} \ No newline at end of file +} diff --git a/SharpMap.Web/Web/HttpHandler.cs b/SharpMap.Web/Web/HttpHandler.cs index 11d7d34e..9508aa41 100644 --- a/SharpMap.Web/Web/HttpHandler.cs +++ b/SharpMap.Web/Web/HttpHandler.cs @@ -51,7 +51,8 @@ public void ProcessRequest(HttpContext context) context.Response.Clear(); context.Response.ContentType = "text/plain"; context.Response.Write("Invalid Image requested"); - context.Response.End(); + context.Response.Flush(); + context.ApplicationInstance.CompleteRequest(); return; } @@ -63,6 +64,7 @@ public void ProcessRequest(HttpContext context) context.Response.OutputStream.Write(buffer, 0, buffer.Length); */ WriteResponseInChunks((byte[])cached, context.Response); + context.ApplicationInstance.CompleteRequest(); return; } @@ -85,6 +87,7 @@ public void ProcessRequest(HttpContext context) //b.Dispose(); WriteResponseInChunks(ms.ToArray(), context.Response); + context.ApplicationInstance.CompleteRequest(); return; //var buffer = ms.ToArray(); //context.Response.OutputStream.Write(buffer, 0, buffer.Length); @@ -148,8 +151,9 @@ private static void WriteResponseInChunks(byte[] buffer, HttpResponse response) } finally { - response.End(); + response.Flush(); + response.SuppressContent = true; } } } -} \ No newline at end of file +} diff --git a/SharpMap.Web/Web/Wms/WmsException.cs b/SharpMap.Web/Web/Wms/WmsException.cs index 05270ec7..6705f509 100644 --- a/SharpMap.Web/Web/Wms/WmsException.cs +++ b/SharpMap.Web/Web/Wms/WmsException.cs @@ -88,7 +88,10 @@ public static void ThrowWmsException(WmsExceptionCode code, string message, Http response.Write(" code=\"" + code + "\""); response.Write(">" + message + "\n"); response.Write(""); - response.End(); + response.Flush(); + response.SuppressContent = true; + + context.ApplicationInstance.CompleteRequest(); } #region Nested type: WmsExceptionCode @@ -164,4 +167,4 @@ public enum WmsExceptionCode // return schema; //} } -} \ No newline at end of file +} diff --git a/SharpMap.Web/Web/Wms/WmsServer.cs b/SharpMap.Web/Web/Wms/WmsServer.cs index 3f1598fe..735916ec 100644 --- a/SharpMap.Web/Web/Wms/WmsServer.cs +++ b/SharpMap.Web/Web/Wms/WmsServer.cs @@ -354,7 +354,10 @@ public static void ParseQueryString(Map map, Capabilities.WmsServiceDescription XmlWriter writer = XmlWriter.Create(context.Response.OutputStream); capabilities.WriteTo(writer); writer.Close(); - context.Response.End(); + context.Response.Flush(); + context.Response.SuppressContent = true; + context.ApplicationInstance.CompleteRequest(); + //context.Response.End(); } else if (String.Compare(context.Request.Params["REQUEST"], "GetFeatureInfo", ignoreCase) == 0) //FeatureInfo Requested { @@ -531,7 +534,9 @@ public static void ParseQueryString(Map map, Capabilities.WmsServiceDescription } context.Response.Write(vstr); context.Response.Flush(); - context.Response.End(); + context.Response.SuppressContent = true; + context.ApplicationInstance.CompleteRequest(); + //context.Response.End(); } else if (String.Compare(context.Request.Params["REQUEST"], "GetMap", ignoreCase) == 0) //Map requested { @@ -795,6 +800,9 @@ public static void ParseQueryString(Map map, Capabilities.WmsServiceDescription context.Response.Clear(); context.Response.ContentType = imageEncoder.MimeType; context.Response.OutputStream.Write(buffer, 0, buffer.Length); + context.Response.Flush(); + context.Response.SuppressContent = true; + context.ApplicationInstance.CompleteRequest(); //context.Response.End(); } else @@ -1245,4 +1253,4 @@ private static bool CqlFilter(FeatureDataRow row, string cqlString) } } -} \ No newline at end of file +} diff --git a/SharpMap.Web/packages.config b/SharpMap.Web/packages.config index 4160ac56..22315490 100644 --- a/SharpMap.Web/packages.config +++ b/SharpMap.Web/packages.config @@ -1,5 +1,7 @@  - - + + + + \ No newline at end of file diff --git a/SharpMap/Converters/WellKnownText/GeometryFromWKT.cs b/SharpMap/Converters/WellKnownText/GeometryFromWKT.cs index c3231bbf..22f21b1b 100644 --- a/SharpMap/Converters/WellKnownText/GeometryFromWKT.cs +++ b/SharpMap/Converters/WellKnownText/GeometryFromWKT.cs @@ -375,7 +375,7 @@ private static IMultiPoint ReadMultiPointText(WktStreamTokenizer tokenizer, IGeo { string nextToken = GetNextEmptyOrOpener(tokenizer); if (nextToken == "EMPTY") - return factory.CreateMultiPoint((Coordinate[])null); + return factory.CreateMultiPointFromCoords((Coordinate[])null); var points = new List(); points.Add(new Coordinate(GetNextNumber(tokenizer), GetNextNumber(tokenizer))); @@ -385,7 +385,7 @@ private static IMultiPoint ReadMultiPointText(WktStreamTokenizer tokenizer, IGeo points.Add(new Coordinate(GetNextNumber(tokenizer), GetNextNumber(tokenizer))); nextToken = GetNextCloserOrComma(tokenizer); } - return factory.CreateMultiPoint(points.ToArray()); + return factory.CreateMultiPointFromCoords(points.ToArray()); } /// @@ -450,4 +450,4 @@ private static IGeometryCollection ReadGeometryCollectionText(WktStreamTokenizer return factory.CreateGeometryCollection(geometries.ToArray()); } } -} \ No newline at end of file +} diff --git a/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs b/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs index a97a152a..db0a9b6a 100644 --- a/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs +++ b/SharpMap/CoordinateSystems/Transformations/GeometryTransform.cs @@ -197,7 +197,7 @@ public static IPolygon TransformPolygon(IPolygon p, IMathTransform transform, IG /// Transformed MultiPoint public static IMultiPoint TransformMultiPoint(IMultiPoint points, IMathTransform transform, IGeometryFactory targetFactory) { - return targetFactory.CreateMultiPoint(TransformCoordinates(points.Coordinates, transform)); + return targetFactory.CreateMultiPointFromCoords(TransformCoordinates(points.Coordinates, transform)); } /// diff --git a/SharpMap/Data/Providers/IProviderConfiguration.cs b/SharpMap/Data/Providers/IProviderConfiguration.cs index f503b36a..77e28c04 100644 --- a/SharpMap/Data/Providers/IProviderConfiguration.cs +++ b/SharpMap/Data/Providers/IProviderConfiguration.cs @@ -46,7 +46,9 @@ public class ShapeFileProviderConfiguration : IProviderConfiguration /// public IProvider Create() { +#pragma warning disable 618 ShapeFile.SpatialIndexCreationOption = SpatialIndexCreationOption; +#pragma warning restore 618 return new ShapeFile(Filename, UseFilebasedIndex, UseMemoryCache); } } @@ -98,4 +100,4 @@ public IProvider Create() ); } } -} \ No newline at end of file +} diff --git a/SharpMap/Data/Providers/ShapeFile.cs b/SharpMap/Data/Providers/ShapeFile.cs index c16747e1..e662063a 100644 --- a/SharpMap/Data/Providers/ShapeFile.cs +++ b/SharpMap/Data/Providers/ShapeFile.cs @@ -103,16 +103,20 @@ static ShapeFile() _memMappedFiles = new Dictionary(); _memMappedFilesRefConter = new Dictionary(); SpatialIndexFactory = new QuadTreeFactory(); +#pragma warning disable 618 SpatialIndexCreationOption = SpatialIndexCreation.Recursive; +#pragma warning restore 618 } #else static ShapeFile() { SpatialIndexFactory = new QuadTreeFactory(); +#pragma warning disable 618 SpatialIndexCreationOption = SpatialIndexCreation.Recursive; +#pragma warning restore 618 } #endif - private readonly bool _useMemoryCache; + private readonly bool _useMemoryCache; private DateTime _lastCleanTimestamp = DateTime.Now; private readonly TimeSpan _cacheExpireTimeout = TimeSpan.FromMinutes(1); private readonly object _cacheLock = new object(); @@ -180,7 +184,8 @@ public ShapeFile(string filename, bool fileBasedIndex) /// Path to shape file /// Use file-based spatial index /// Use the memory cache. BEWARE in case of large shapefiles - public ShapeFile(string filename, bool fileBasedIndex, bool useMemoryCache) : this(filename, fileBasedIndex,useMemoryCache,0) + public ShapeFile(string filename, bool fileBasedIndex, bool useMemoryCache) + : this(filename, fileBasedIndex,useMemoryCache,0) { } @@ -1034,7 +1039,6 @@ private ISpatialIndex CreateSpatialIndexFromFile(string filename) /// /// Options to create the spatial index /// - [Obsolete("Use SpatialIndexFactory")] public enum SpatialIndexCreation { /// @@ -1249,7 +1253,7 @@ private static IGeometry ParseGeometry(IGeometryFactory factory, ShapeType shape for (var i = 0; i < nPoints; i++) feature[i].Z = brGeometryStream.ReadDouble(); } - return factory.CreateMultiPoint(feature); + return factory.CreateMultiPointFromCoords(feature); } if (shapeType == ShapeType.PolyLine || shapeType == ShapeType.Polygon || diff --git a/SharpMap/Geometries/GeoAPIEx.cs b/SharpMap/Geometries/GeoAPIEx.cs index b0bb4352..b5bbc5f1 100644 --- a/SharpMap/Geometries/GeoAPIEx.cs +++ b/SharpMap/Geometries/GeoAPIEx.cs @@ -304,7 +304,7 @@ public static double [] ToDoubleArray(this Coordinate self) /// true if the ring is oriented counter clockwise public static bool IsCCW(this ILinearRing self) { - return NetTopologySuite.Algorithm.CGAlgorithms.IsCCW(self.Coordinates); + return NetTopologySuite.Algorithm.Orientation.IsCCW(self.Coordinates); } /// @@ -405,4 +405,4 @@ public static void SetExtent(Geometry geom, Envelope envelope) } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/AsyncLayerProxyLayer.cs b/SharpMap/Layers/AsyncLayerProxyLayer.cs index 4dbace21..5b45dde7 100644 --- a/SharpMap/Layers/AsyncLayerProxyLayer.cs +++ b/SharpMap/Layers/AsyncLayerProxyLayer.cs @@ -322,10 +322,11 @@ int ITileAsyncLayer.NumPendingDownloads private bool RenderCellOnThread(System.Threading.CancellationToken token, Point ptInsert, Map map) { var tile = new Bitmap(map.Size.Width, map.Size.Height, PixelFormat.Format32bppArgb); + var mvp = new MapViewport(map); using (var g = Graphics.FromImage(tile)) { g.Clear(Color.Transparent); - _baseLayer.Render(g, map); + _baseLayer.Render(g, mvp); map.Layers.Clear(); } diff --git a/SharpMap/Layers/LabelLayer.cs b/SharpMap/Layers/LabelLayer.cs index f962cda9..ac753a11 100644 --- a/SharpMap/Layers/LabelLayer.cs +++ b/SharpMap/Layers/LabelLayer.cs @@ -343,7 +343,7 @@ public override Envelope Envelope throw (new ApplicationException("DataSource property not set on layer '" + LayerName + "'")); if (_envelope != null && CacheExtent) - return ToTarget(_envelope.Clone()); + return ToTarget(_envelope.Copy()); var wasOpen = DataSource.IsOpen; if (!wasOpen) diff --git a/SharpMap/Layers/TiledWmsLayer.cs b/SharpMap/Layers/TiledWmsLayer.cs index 36cab745..c98144f7 100644 --- a/SharpMap/Layers/TiledWmsLayer.cs +++ b/SharpMap/Layers/TiledWmsLayer.cs @@ -227,7 +227,7 @@ public override void Render(Graphics g, MapViewport map) tileSet.Verify(); - List tileExtents = TileExtents.GetTileExtents(tileSet, map.Envelope, map.PixelSize); + List tileExtents = TileExtents.GetTileExtents(tileSet, map.Envelope, Math.Max(map.PixelWidth, map.PixelHeight)); if (logger.IsDebugEnabled) logger.DebugFormat("TileCount: {0}", tileExtents.Count); @@ -480,4 +480,4 @@ private static Rectangle RoundRectangle(RectangleF dest) return new Rectangle((int) minX, (int) minY, (int) (maxX - minX), (int) (maxY - minY)); } } -} \ No newline at end of file +} diff --git a/SharpMap/Layers/VectorLayer.cs b/SharpMap/Layers/VectorLayer.cs index e0c71c1e..3cb6a408 100644 --- a/SharpMap/Layers/VectorLayer.cs +++ b/SharpMap/Layers/VectorLayer.cs @@ -144,7 +144,7 @@ public override Envelope Envelope throw (new ApplicationException("DataSource property not set on layer '" + LayerName + "'")); if (_envelope != null && CacheExtent) - return ToTarget(_envelope.Clone()); + return ToTarget(_envelope.Copy()); Envelope box; lock (_dataSource) diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index 2bbbda76..d771ca83 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -87,7 +87,7 @@ static Map() throw new InvalidOperationException(); } } - + // The following code did not seem to work in all cases. /* if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime) @@ -149,7 +149,7 @@ static Map() private object _lockMapTransform = new object(); private Matrix _mapTransform; private Matrix _mapTransformInverted; - + private readonly MapViewPortGuard _mapViewportGuard; private readonly Dictionary> _layersPerGroup = new Dictionary>(); private ObservableCollection _replacingCollection; @@ -231,12 +231,12 @@ private void OnLayersCollectionChanged(object sender, NotifyCollectionChangedEve { IterWireEvents(sender, e.NewItems.Cast()); } - + } private void IterWireEvents(object owner, IEnumerable layers) { - foreach (var layer in layers) + foreach(var layer in layers) { _layersPerGroup[owner].Add(layer); @@ -304,7 +304,7 @@ private void IterUnHookEvents(object owner, IEnumerable layers) var clonedList = _layersPerGroup[owner]; toBeRemoved.ForEach(layer => clonedList.Remove(layer)); } - + private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) { var layerGroup = (LayerGroup)sender; @@ -327,7 +327,7 @@ private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) private void OnLayerGroupCollectionReplaching(object sender, EventArgs eventArgs) { - var layerGroup = (LayerGroup)sender; + var layerGroup = (LayerGroup) sender; _replacingCollection = layerGroup.Layers; } @@ -543,28 +543,28 @@ public Metafile GetMapAsMetafile(string metafileName) var bm = new Bitmap(1, 1); using (var g = Graphics.FromImage(bm)) { - var hdc = g.GetHdc(); - using (var stream = new MemoryStream()) - { - metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), - MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); - - using (var metafileGraphics = Graphics.FromImage(metafile)) - { - metafileGraphics.PageUnit = GraphicsUnit.Pixel; - metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, - new[] { new PointF(Size.Width, Size.Height) }); - - //Render map to metafile - RenderMap(metafileGraphics); - } - - //Save metafile if desired - if (!String.IsNullOrEmpty(metafileName)) - File.WriteAllBytes(metafileName, stream.ToArray()); - } + var hdc = g.GetHdc(); + using (var stream = new MemoryStream()) + { + metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), + MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); + + using (var metafileGraphics = Graphics.FromImage(metafile)) + { + metafileGraphics.PageUnit = GraphicsUnit.Pixel; + metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, + new[] {new PointF(Size.Width, Size.Height)}); + + //Render map to metafile + RenderMap(metafileGraphics); + } + + //Save metafile if desired + if (!String.IsNullOrEmpty(metafileName)) + File.WriteAllBytes(metafileName, stream.ToArray()); + } g.ReleaseHdc(hdc); - } + } return metafile; } @@ -581,7 +581,7 @@ public void MapNewTileAvaliableHandler(ITileAsyncLayer sender, Envelope bbox, Bi { var e = MapNewTileAvaliable; if (e != null) - e(sender, bbox, bm, sourceWidth, sourceHeight, imageAttributes); + e(sender, bbox, bm,sourceWidth,sourceHeight,imageAttributes); } /// @@ -657,7 +657,7 @@ public void RenderMap(Graphics g) OnLayerRendering(layer, LayerCollectionType.Static); if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) LayerCollectionRenderer.RenderLayer(layer, g, mvp); - + OnLayerRendered(layer, LayerCollectionType.Static); } } @@ -675,7 +675,7 @@ public void RenderMap(Graphics g) double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) LayerCollectionRenderer.RenderLayer(layer, g, mvp); - + } } @@ -803,7 +803,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool break; } - if (lc == null || lc.Count == 0) + if (lc== null || lc.Count == 0) throw new InvalidOperationException("No layers to render"); Matrix transform = g.Transform; @@ -839,7 +839,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool if (drawTransparent) g.Transform = transform; - + if (layerCollectionType == LayerCollectionType.Static) { #pragma warning disable 612,618 @@ -898,7 +898,7 @@ public Map Clone() if (!Size.IsEmpty) clone.Size = new Size(Size.Width, Size.Height); if (Center != null) - clone.Center = (Coordinate)Center.Clone(); + clone.Center = Center.Copy(); } @@ -970,7 +970,7 @@ public IEnumerable FindLayer(string layername) /// Layer public ILayer GetLayerByName(string name) { - ILayer lay = null; + ILayer lay = null; if (Layers != null) { lay = Layers.GetLayerByName(name); @@ -1054,14 +1054,14 @@ public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) // working with MapTransform clone if ( MapTransformRotation != 0) using (var transform = MapTransform) - { + { if (!transform.IsIdentity ) - { - var pts = new[] { pTmp }; + { + var pts = new[] { pTmp }; transform.TransformPoints(pts); - pTmp = pts[0]; - } + pTmp = pts[0]; } + } return pTmp; } @@ -1167,7 +1167,7 @@ public Envelope Envelope var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); - + var ptfll = WorldToImage(ll, true); ptfll = new PointF(Math.Abs(ptfll.X), Math.Abs(Size.Height - ptfll.Y)); if (!ptfll.IsEmpty) @@ -1177,7 +1177,7 @@ public Envelope Envelope ur.X = ur.X + ptfll.X * PixelWidth; ur.Y = ur.Y + ptfll.Y * PixelHeight; } - return new Envelope(ll, ur); + return new Envelope(ll, ur); } } @@ -1202,26 +1202,29 @@ public Matrix MapTransform } set { - lock (_lockMapTransform) - { - _mapTransform = value; - if (_mapTransform.IsInvertible) - { - _mapTransformInverted = value.Clone(); - _mapTransformInverted.Invert(); - } - else - _mapTransformInverted.Reset(); + if (value == null) + value = new Matrix(); - if (_mapTransform.IsIdentity) - MapTransformRotation = 0; - else - MapTransformRotation = Convert.ToSingle(Math.Acos(_mapTransform.Elements[0]) * 180.0 / Math.PI); + if (!value.IsInvertible) + throw new ArgumentException("Matrix not invertible", nameof(value)); + + _mapTransform = value; + _mapTransformInverted = value.Clone(); + _mapTransformInverted.Invert(); + + if (_mapTransform.IsIdentity) + MapTransformRotation = 0; + else + MapTransformRotation = Convert.ToSingle(Math.Acos(_mapTransform.Elements[0]) * 180.0 / Math.PI); - } } } + internal Matrix MapTransformInverted + { + get { return _mapTransformInverted; } + } + /// /// MapTransform Rotation in degrees. Facilitates determining if map is rotated without locking MapTransform. /// @@ -1293,7 +1296,7 @@ public Point Center _center = newCenter; changed = true; } - + if (changed && MapViewOnChange != null) MapViewOnChange(); } @@ -1312,7 +1315,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int)g.DpiX; + _dpiX = (int) g.DpiX; } } @@ -1324,7 +1327,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int)g.DpiX; + _dpiX = (int) g.DpiX; } } Zoom = GetMapZoomFromScale(value, _dpiX.Value); @@ -1385,7 +1388,7 @@ public double Zoom /// public double PixelSize { - get { return Zoom / Size.Width; } + get { return Zoom/Size.Width; } } /// @@ -1426,7 +1429,7 @@ public double PixelAspectRatio /// public double MapHeight { - get { return (Zoom * Size.Height) / Size.Width * PixelAspectRatio; } + get { return (Zoom*Size.Height)/Size.Width*PixelAspectRatio; } } /// @@ -1507,7 +1510,7 @@ private static void ExtendBoxForCollection(IEnumerable layersCollection, { foreach (var l in layersCollection) { - + //Tries to get bb. Fails on some specific shapes and Mercator projects (World.shp) Envelope bb; try @@ -1554,7 +1557,7 @@ public String Disclaimer _disclaimerFont = new Font(FontFamily.GenericSansSerif, 8f); } } - } + } private Font _disclaimerFont; /// @@ -1583,7 +1586,7 @@ public Font DisclaimerFont public Int32 DisclaimerLocation { get { return _disclaimerLocation; } - set { _disclaimerLocation = value % 4; } + set { _disclaimerLocation = value%4; } } diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index 1440f1f4..08f82402 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -1,25 +1,32 @@ using System; using System.Drawing; using System.Drawing.Drawing2D; +using System.Runtime.CompilerServices; +using System.Threading; using GeoAPI.Geometries; using SharpMap.Utilities; namespace SharpMap { /// - /// A utility class, that encapuslates all data required for rendering. + /// A utility class, that encapsulates all data required for rendering. /// /// This is a value class public class MapViewport { private readonly Envelope _envelope; + private readonly Coordinate _center; + private readonly Matrix _mapTransform; private readonly Matrix _mapTransformInverted; - private double _left; - private double _top; - private int _lastDpi; + + private readonly double _left; + private readonly double _top; private double _mapScale; - private object _lockMapScale = new object(); + private int _lastDpi; + + // TODO: Reconsider computing map scale + private readonly object _lockMapScale = new object(); /// /// Creates an instance of this class @@ -30,105 +37,143 @@ public class MapViewport /// The size of the viewport /// A ratio between width and height /// An affine map transform matrix - public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAspectRatio, Matrix mapTransform) + /// The affine map transformation that inverts + public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAspectRatio, Matrix mapTransform, Matrix mapTransformInverted) { ID = mapId; SRID = srid; - _envelope = new Envelope(env); + _envelope = env.Copy(); Size = size; - Center = env.Centre; + _center = env.Centre; PixelAspectRatio = pixelAspectRatio; - PixelWidth = PixelSize = env.Width / size.Width; - PixelHeight = PixelWidth * pixelAspectRatio; + PixelWidth = /*PixelSize = */env.Width/size.Width; + PixelHeight = PixelWidth*pixelAspectRatio; Zoom = env.Width; - MapHeight = Zoom * pixelAspectRatio; + MapHeight = Zoom*pixelAspectRatio; // already cloned _mapTransform = mapTransform; - if (_mapTransform.IsInvertible) - { - _mapTransformInverted = _mapTransform.Clone(); - _mapTransformInverted.Invert(); - } - else - _mapTransformInverted = new Matrix(); + _mapTransformInverted = mapTransformInverted; - var height = (Zoom * Size.Height) / Size.Width; + double height = (Zoom * Size.Height) / Size.Width; _left = Center.X - Zoom * 0.5; _top = Center.Y + height * 0.5 * PixelAspectRatio; } + /// + /// Creates an instance of this class based on the provided map + /// + /// The Map + public MapViewport(Map map) + :this(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, map.MapTransform, map.MapTransformInverted) + { + } + /// /// Gets a value indicating the which this viewport belongs to. /// - public Guid ID { get; private set; } + public Guid ID { get; } - public int SRID { get; set; } + /// + /// Gets a value indicating the spatial reference id of the map + /// + public int SRID { get; /*set;*/ } - public Size Size { get; private set; } + /// + /// Gets a value indicating the size of the map + /// + public Size Size { get; } + /// + /// Gets a value indicating the area covered by the map (in world units) + /// public Envelope Envelope { - get { return new Envelope(_envelope); } + get { return _envelope.Copy(); } } + /// + /// Gets a value indicating the transformation that has to be applied when + /// rendering the map + /// public Matrix MapTransform { get { return _mapTransform.Clone(); } } - public Coordinate Center { get; private set; } + /// + /// Gets a value indicating the center of the map viewport + /// + public Coordinate Center + { + get { return _center.Copy(); } + } + + /// + /// Gets a value indicating the zoom of the map viewport + /// + /// This value is identical to + public double Zoom { get; /*set;*/ } + /// + /// Gets a value indicating the height of the map viewport in world units + /// + public double MapHeight { get; } - public double Zoom { get; private set; } - public double MapHeight { get; private set; } + /// + /// Gets a value indicating the width of the map viewport in world units + /// + /// This value is equal to public double MapWidth { get { return Zoom; } } /// /// Gets or sets the aspect-ratio of the pixel scales. A value less than - /// 1 will make the map streach upwards, and larger than 1 will make it smaller. + /// 1 will make the map stretch upwards, and larger than 1 will make it smaller. /// /// Throws an argument exception when value is 0 or less. - public double PixelAspectRatio - { - get; private set; - } + public double PixelAspectRatio { get; } - /// - /// Get Returns the size of a pixel in world coordinate units - /// - [Obsolete("Use PixelWidth or PixelHeight")] - public double PixelSize { get; private set; } + ///// + ///// Get Returns the size of a pixel in world coordinate units + ///// + //[Obsolete("Use PixelWidth or PixelHeight")] + //public double PixelSize { get; private set; } /// /// Returns the width of a pixel in world coordinate units. /// - public double PixelWidth { get; private set; } + public double PixelWidth { get; } /// /// Returns the height of a pixel in world coordinate units. /// - public double PixelHeight { get; private set; } + public double PixelHeight { get; } + /// + /// Function to compute the denominator of the viewport's scale when using a given resolution. + /// + /// The resolution + /// The scale's denominator public double GetMapScale(int dpi) { + // Why lock? lock (_lockMapScale) { if (_lastDpi != dpi) { _mapScale = ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); _lastDpi = dpi; - } + } return _mapScale; } } /// /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. + /// , and . /// /// Point in world coordinates /// Indicates whether MapTransform should be taken into account @@ -139,22 +184,22 @@ public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) if (!careAboutMapTransform) return pTmp; - using (var transform = MapTransform) + Monitor.Enter(_mapTransform); + if (_mapTransform.IsIdentity) { - if (!transform.IsIdentity) - { - var pts = new[] { pTmp }; - transform.TransformPoints(pts); - pTmp = pts[0]; - } + var pts = new[] {pTmp}; + _mapTransform.TransformPoints(pts); + pTmp = pts[0]; } + Monitor.Exit(_mapTransform); + return pTmp; } /// /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. + /// , and . /// /// Point in world coordinates /// Point in image coordinates @@ -163,11 +208,11 @@ public PointF WorldToImage(Coordinate p) if (p.IsEmpty()) return PointF.Empty; - var x = (p.X - _left) / PixelWidth; + double x = (p.X - _left) / PixelWidth; if (double.IsNaN(x)) return PointF.Empty; - var y = (_top - p.Y) / PixelHeight; + double y = (_top - p.Y) / PixelHeight; if (double.IsNaN(y)) return PointF.Empty; @@ -176,7 +221,7 @@ public PointF WorldToImage(Coordinate p) /// /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. + /// , and . /// /// Point in image coordinates /// Point in world coordinates @@ -186,26 +231,25 @@ public Coordinate ImageToWorld(PointF p) } /// /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. + /// , and . /// /// Point in image coordinates /// Indicates whether MapTransform should be taken into account /// Point in world coordinates public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) { - if (careAboutMapTransform) - using (var transformInv = _mapTransformInverted.Clone()) - { - if (!transformInv.IsIdentity) - { - var pts = new[] { p }; - transformInv.TransformPoints(pts); - p = pts[0]; - } - } + Monitor.Enter(_mapTransformInverted); + if (_mapTransformInverted.IsIdentity) + { + var pts = new[] { p }; + _mapTransformInverted.TransformPoints(pts); + p = pts[0]; + } + Monitor.Exit(_mapTransformInverted); return Transform.MapToWorld(p, this); } + /// /// Creates a map viewport from a given map /// @@ -213,8 +257,9 @@ public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) /// public static implicit operator MapViewport(Map map) { - return new MapViewport(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, - map.MapTransform); + return new MapViewport(map); + //return new MapViewport(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, + // map.MapTransform, map.MapTransformInverted); } } diff --git a/SharpMap/Rendering/LayerCollectionRenderer.cs b/SharpMap/Rendering/LayerCollectionRenderer.cs index 2657bf22..e49f7201 100644 --- a/SharpMap/Rendering/LayerCollectionRenderer.cs +++ b/SharpMap/Rendering/LayerCollectionRenderer.cs @@ -25,7 +25,7 @@ public class LayerCollectionRenderer : IDisposable private Image[] _images; private static Func _parallelHeuristic; //private Matrix _transform; - + /// /// Creates an instance of this class /// @@ -164,14 +164,14 @@ private void RenderToImage(int layerIndex, ParallelLoopState pls) /// /// Invokes the rendering of the layer, a red X is drawn if it fails. /// - /// - /// - /// - public static void RenderLayer(ILayer layer, Graphics g, MapViewport mapViewPort) + /// The layer to render + /// The graphics object to use + /// The viewport + public static void RenderLayer(ILayer layer, Graphics g, MapViewport mapViewport) { try { - layer.Render(g, mapViewPort); + layer.Render(g, mapViewport); } catch (Exception e) { @@ -179,7 +179,7 @@ public static void RenderLayer(ILayer layer, Graphics g, MapViewport mapViewPort using (var pen = new Pen(Color.Red, 4f)) { - var size = mapViewPort.Size; + var size = mapViewport.Size; g.DrawLine(pen, 0, 0, size.Width, size.Height); g.DrawLine(pen, size.Width,0, 0, size.Height); diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index 1527ffc9..c2bd2386 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -50,17 +50,17 @@ ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll diff --git a/SharpMap/Utilities/Indexing/SpatialIndexing.cs b/SharpMap/Utilities/Indexing/SpatialIndexing.cs index 5c1c0d23..5d47893f 100644 --- a/SharpMap/Utilities/Indexing/SpatialIndexing.cs +++ b/SharpMap/Utilities/Indexing/SpatialIndexing.cs @@ -855,4 +855,4 @@ private static QuadTree CreateSpatialIndexRecursive(Envelope extent, int expecte } } -} \ No newline at end of file +} diff --git a/SharpMap/packages.config b/SharpMap/packages.config index aeb83eb0..c131defa 100644 --- a/SharpMap/packages.config +++ b/SharpMap/packages.config @@ -2,6 +2,10 @@ - - + + + + + + \ No newline at end of file diff --git a/SharpMapServer.sln b/SharpMapServer.sln index 1b5e7bc9..bce85f19 100644 --- a/SharpMapServer.sln +++ b/SharpMapServer.sln @@ -1,6 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2047 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap", "SharpMap\SharpMap.csproj", "{C83777FC-AABB-47D9-911F-D76255D4D541}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMapServer", "SharpMapServer\SharpMapServer.csproj", "{FCA0E48D-9803-4F63-BA14-AB8F8810709B}" @@ -17,12 +19,12 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {C83777FC-AABB-47D9-911F-D76255D4D541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C83777FC-AABB-47D9-911F-D76255D4D541}.DebugDSProjection|Any CPU.ActiveCfg = DebugDSProjection|Any CPU - {C83777FC-AABB-47D9-911F-D76255D4D541}.DebugDSProjection|Any CPU.Build.0 = DebugDSProjection|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.DebugDSProjection|Any CPU.ActiveCfg = Debug|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.DebugDSProjection|Any CPU.Build.0 = Debug|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Any CPU.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Any CPU.Build.0 = Release|Any CPU - {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseDSProjection|Any CPU.ActiveCfg = ReleaseDSProjection|Any CPU - {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseDSProjection|Any CPU.Build.0 = ReleaseDSProjection|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseDSProjection|Any CPU.ActiveCfg = Release|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseDSProjection|Any CPU.Build.0 = Release|Any CPU {FCA0E48D-9803-4F63-BA14-AB8F8810709B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCA0E48D-9803-4F63-BA14-AB8F8810709B}.Debug|Any CPU.Build.0 = Debug|Any CPU {FCA0E48D-9803-4F63-BA14-AB8F8810709B}.DebugDSProjection|Any CPU.ActiveCfg = Debug|Any CPU @@ -33,14 +35,17 @@ Global {FCA0E48D-9803-4F63-BA14-AB8F8810709B}.ReleaseDSProjection|Any CPU.Build.0 = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.Debug|Any CPU.Build.0 = Debug|Any CPU - {292EF671-4063-4952-8DE0-423DF72A0950}.DebugDSProjection|Any CPU.ActiveCfg = DebugDSProjection|Any CPU - {292EF671-4063-4952-8DE0-423DF72A0950}.DebugDSProjection|Any CPU.Build.0 = DebugDSProjection|Any CPU + {292EF671-4063-4952-8DE0-423DF72A0950}.DebugDSProjection|Any CPU.ActiveCfg = Debug|Any CPU + {292EF671-4063-4952-8DE0-423DF72A0950}.DebugDSProjection|Any CPU.Build.0 = Debug|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.Release|Any CPU.ActiveCfg = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.Release|Any CPU.Build.0 = Release|Any CPU - {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseDSProjection|Any CPU.ActiveCfg = ReleaseDSProjection|Any CPU - {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseDSProjection|Any CPU.Build.0 = ReleaseDSProjection|Any CPU + {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseDSProjection|Any CPU.ActiveCfg = Release|Any CPU + {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseDSProjection|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {05A96BE6-3DB6-4E05-80C2-BB90ABD77ED6} + EndGlobalSection EndGlobal diff --git a/SharpMapServer/App_Data/settings.xml b/SharpMapServer/App_Data/settings.xml new file mode 100644 index 00000000..1787e592 --- /dev/null +++ b/SharpMapServer/App_Data/settings.xml @@ -0,0 +1,27 @@ + + + + + 0 + admin + sharpmap + + + + + States + Demo data over US States + states.shp + Shapefile + + + + 0 + This is an example SharpMap server + 0 + 0 + 0 + SharpMap Demo Server + SharpMap,WMS + + \ No newline at end of file diff --git a/SharpMapServer/Global.asax.cs b/SharpMapServer/Global.asax.cs index 09dce7c0..71d9857b 100644 --- a/SharpMapServer/Global.asax.cs +++ b/SharpMapServer/Global.asax.cs @@ -9,12 +9,28 @@ using System.IO; using System.Reflection; using System.Xml.Serialization; +using NetTopologySuite; +using ProjNet.CoordinateSystems; +using ProjNet.CoordinateSystems.Transformations; + namespace SharpMapServer { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { + var gss = new NtsGeometryServices(); + var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( + new CoordinateSystemFactory(), + new CoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + + GeoAPI.GeometryServiceProvider.Instance = gss; + SharpMap.Session.Instance + .SetGeometryServices(gss) + .SetCoordinateSystemServices(css) + .SetCoordinateSystemRepository(css); + string settingsfile = Server.MapPath("~/App_Data/settings.xml"); XmlSerializer serializer = new XmlSerializer(typeof(SharpMapContext)); if (!System.IO.File.Exists(settingsfile)) @@ -105,4 +121,4 @@ protected void Application_End(object sender, EventArgs e) } } -} \ No newline at end of file +} diff --git a/SharpMapServer/SharpMapServer.csproj b/SharpMapServer/SharpMapServer.csproj index 2e25ef71..2e2aed09 100644 --- a/SharpMapServer/SharpMapServer.csproj +++ b/SharpMapServer/SharpMapServer.csproj @@ -21,11 +21,12 @@ 4.0 ..\ - + + true @@ -45,9 +46,17 @@ 4 - - False - ..\packages\GeoAPI.1.7.1\lib\net40-client\GeoAPI.dll + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll @@ -188,7 +197,7 @@ - + diff --git a/SharpMapServer/Web.Debug.config b/SharpMapServer/Web.Debug.config index 962e6b73..25463b47 100644 --- a/SharpMapServer/Web.Debug.config +++ b/SharpMapServer/Web.Debug.config @@ -27,4 +27,4 @@ --> - \ No newline at end of file + diff --git a/SharpMapServer/Web.Release.config b/SharpMapServer/Web.Release.config index 141832ba..2c42cba3 100644 --- a/SharpMapServer/Web.Release.config +++ b/SharpMapServer/Web.Release.config @@ -6,7 +6,7 @@ - \ No newline at end of file + diff --git a/SharpMapServer/Web.config b/SharpMapServer/Web.config index 52354d32..ba96a0c8 100644 --- a/SharpMapServer/Web.config +++ b/SharpMapServer/Web.config @@ -4,19 +4,13 @@ http://go.microsoft.com/fwlink/?LinkId=169433 --> + + + + + + - - - - - - - - - - - - - \ No newline at end of file + diff --git a/SharpMapServer/packages.config b/SharpMapServer/packages.config index 9c5cfa27..27be6d6c 100644 --- a/SharpMapServer/packages.config +++ b/SharpMapServer/packages.config @@ -1,4 +1,8 @@  - + + + + + \ No newline at end of file diff --git a/UnitTests/Converters/WKT/WktGeometryTests.cs b/UnitTests/Converters/WKT/WktGeometryTests.cs index f7af53bf..5cc291b6 100644 --- a/UnitTests/Converters/WKT/WktGeometryTests.cs +++ b/UnitTests/Converters/WKT/WktGeometryTests.cs @@ -92,7 +92,7 @@ public void ParseMultiPoint() Assert.AreEqual(54, ((IPoint)geom[2]).Y); Assert.AreEqual(multipoint, geom.AsText()); Assert.IsTrue(GeomFromText("MULTIPOINT EMPTY").IsEmpty); - Assert.AreEqual("MULTIPOINT EMPTY", Factory.CreateMultiPoint((Coordinate[])null).AsText()); + Assert.AreEqual("MULTIPOINT EMPTY", Factory.CreateMultiPointFromCoords((Coordinate[])null).AsText()); } [Test] @@ -175,4 +175,4 @@ public void ParsePolygon() } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/NtsProviderTests.cs b/UnitTests/Data/Providers/NtsProviderTests.cs index 14a2153d..40d61c4b 100644 --- a/UnitTests/Data/Providers/NtsProviderTests.cs +++ b/UnitTests/Data/Providers/NtsProviderTests.cs @@ -67,10 +67,10 @@ public void FeatureWithNullDataThrowsException2() private static AttributesTable CreateAttributes(int id, string label) { var res = new AttributesTable(); - res.AddAttribute("id", id); - res.AddAttribute("label", label); + res.Add("id", id); + res.Add("label", label); return res; } } -} \ No newline at end of file +} diff --git a/UnitTests/Properties/Settings.Designer.cs b/UnitTests/Properties/Settings.Designer.cs index 2b0cb08e..9f5708ed 100644 --- a/UnitTests/Properties/Settings.Designer.cs +++ b/UnitTests/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace UnitTests.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -45,30 +45,30 @@ public string SqlServer2008 { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] - [global::System.Configuration.DefaultSettingValueAttribute("Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true")] - public string PostGis { + [global::System.Configuration.DefaultSettingValueAttribute("Microsoft.ACE.OLEDB.12.0")] + public string OleDbProvider { get { - return ((string)(this["PostGis"])); + return ((string)(this["OleDbProvider"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] - [global::System.Configuration.DefaultSettingValueAttribute("Data Source=:memory:")] - public string SpatiaLite { + [global::System.Configuration.DefaultSettingValueAttribute("Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true;")] + public string PostGis { get { - return ((string)(this["SpatiaLite"])); + return ((string)(this["PostGis"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Microsoft.ACE.OLEDB.15.0")] - public string OleDbProvider { + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=:memory:")] + public string SpatiaLite { get { - return ((string)(this["OleDbProvider"])); + return ((string)(this["SpatiaLite"])); } } } diff --git a/UnitTests/Properties/Settings.settings b/UnitTests/Properties/Settings.settings index 51871d03..102f4152 100644 --- a/UnitTests/Properties/Settings.settings +++ b/UnitTests/Properties/Settings.settings @@ -17,24 +17,22 @@ </SerializableConnectionString> Data Source=;Initial Catalog=;Integrated Security=True + + Microsoft.ACE.OLEDB.12.0 + <?xml version="1.0" encoding="utf-16"?> <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <ConnectionString>Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true</ConnectionString> - <ProviderName /> + <ConnectionString>Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true;</ConnectionString> </SerializableConnectionString> - Host=ivv-sqlt3;Port=5433;database=postgis_sample;SSPI=true + Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true; <?xml version="1.0" encoding="utf-16"?> <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ConnectionString>Data Source=:memory:</ConnectionString> - <ProviderName /> </SerializableConnectionString> Data Source=:memory: - - Microsoft.ACE.OLEDB.15.0 - \ No newline at end of file diff --git a/UnitTests/Serialization/SerializationTests.cs b/UnitTests/Serialization/SerializationTests.cs index e9b2bdeb..84c394c1 100644 --- a/UnitTests/Serialization/SerializationTests.cs +++ b/UnitTests/Serialization/SerializationTests.cs @@ -131,7 +131,7 @@ public void FileCache() #region Tile sources - //[Ignore("Needs internet connection")] + [Ignore("Needs internet connection")] [TestCase("http://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities")] public void TestWmtsTileSource(string url) { @@ -275,12 +275,12 @@ private static bool EqualTileProviders(ITileSchema schema, ITileProvider tp1, IT var minkey = GetIndex(keys[0]); var maxKey = GetIndex(keys[keys.Length - 1]); var prefix = GetPrefix(keys[0]); - for (var i = 0; i < 8; i++) + for (var i = 0; i < 3; i++) { TileInfo ti = null; try { - ti = RandomTileInfo(prefix + "{0}", minkey, maxKey); + ti = RandomTileInfo(prefix + "{0}", minkey, Math.Min(maxKey, 12)); var req1 = tp1 as IRequest; var req2 = tp2 as IRequest; if (req1 != null && req2 != null) @@ -535,4 +535,4 @@ private static T SandD(T obj, IFormatter formatter = null) #endregion } -} \ No newline at end of file +} diff --git a/UnitTests/TestWmsCapabilityParser.cs b/UnitTests/TestWmsCapabilityParser.cs index 631f797d..600dd2e0 100644 --- a/UnitTests/TestWmsCapabilityParser.cs +++ b/UnitTests/TestWmsCapabilityParser.cs @@ -37,7 +37,7 @@ public void Test130() Assert.AreEqual(4, c.Layer.ChildLayers.Length); } - [Test] + [Test, Ignore] public void TestDemisv111() { Client c = new Client("http://www3.demis.nl/worldmap/wms.asp"); @@ -48,4 +48,4 @@ public void TestDemisv111() Assert.AreEqual(20, c.Layer.ChildLayers.Length); } } -} \ No newline at end of file +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index e897a3da..70751fc0 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -72,9 +72,11 @@ ..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll True - - ..\packages\GeoAPI.1.7.4\lib\net40-client\GeoAPI.dll - True + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll @@ -88,33 +90,17 @@ ..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll - - ..\packages\NetTopologySuite.1.14\lib\net40-client\NetTopologySuite.dll - True - - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.dll - True + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.GeoTools.dll - True + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.MsSqlSpatial.dll - True + + ..\packages\NetTopologySuite.Features.1.15.0\lib\net40\NetTopologySuite.Features.dll - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.PostGis.dll - True - - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.dll - True - - - ..\packages\NetTopologySuite.IO.1.14.0.1\lib\net40-client\NetTopologySuite.IO.ShapeFile.Extended.dll - True + + ..\packages\NetTopologySuite.IO.PostGis.1.15.0\lib\net40-client\NetTopologySuite.IO.PostGis.dll ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll @@ -132,13 +118,8 @@ ..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll True - - ..\packages\NetTopologySuite.1.14\lib\net40-client\PowerCollections.dll - True - - - ..\packages\ProjNET4GeoAPI.1.3.2-pre1\lib\net40-client\ProjNet.dll - True + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll @@ -166,6 +147,7 @@ + diff --git a/UnitTests/app.config b/UnitTests/app.config index 823a0dcb..b45e1d0f 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -9,15 +9,16 @@ - + - - + + - Microsoft.ACE.OLEDB.15.0 + Microsoft.ACE.OLEDB.12.0 @@ -49,11 +50,11 @@ - + - + diff --git a/UnitTests/packages.config b/UnitTests/packages.config index 348bf37e..e37e6d8f 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -4,13 +4,18 @@ - + + + - - + + + + + - + From f978de4582305366d0f2813f981a8a76cf751a4d Mon Sep 17 00:00:00 2001 From: joriswit Date: Thu, 13 Sep 2018 20:26:56 +0200 Subject: [PATCH 057/186] Minor test changes, added test to verify SqlServer2008 performance --- .../Data/Providers/PostGisGeographyTests.cs | 1 - .../Data/Providers/SQLServer2008Tests.cs | 45 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/UnitTests/Data/Providers/PostGisGeographyTests.cs b/UnitTests/Data/Providers/PostGisGeographyTests.cs index db5897dd..2854f779 100644 --- a/UnitTests/Data/Providers/PostGisGeographyTests.cs +++ b/UnitTests/Data/Providers/PostGisGeographyTests.cs @@ -53,7 +53,6 @@ public void FixtureSetup() cmd.CommandText = "DROP TABLE IF EXISTS roads_ugl"; cmd.ExecuteNonQuery(); - // The ID column cannot simply be int, because that would cause GetObjectIDsInView to fail. The provider internally works with uint cmd.CommandText = "CREATE TABLE roads_ugl(id integer primary key, name character varying(100), geog geography);"; cmd.ExecuteNonQuery(); diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index b23d5a9b..a8aed478 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -65,8 +65,7 @@ public void SetupFixture() conn.Open(); using(SqlCommand cmd = conn.CreateCommand()) { - // The ID column cannot simply be int, because that would cause GetObjectIDsInView to fail. The provider internally works with uint - cmd.CommandText = "CREATE TABLE roads_ugl(ID decimal(10,0) identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; + cmd.CommandText = "CREATE TABLE roads_ugl(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; cmd.ExecuteNonQuery(); } @@ -281,6 +280,48 @@ public void TestGetGeometriesInViewEx() Assert.AreEqual(100, geometries.Count); } + [NUnit.Framework.Test()] + [Ignore("Do not run performance test by default, because it might fail because of external factors (busy CPU).")] + public void TestPerformanceSqlServer2008ExProvider() + { + // Note: + // This test may fail with an InvalidCastException. This is caused by multiple versions of the + // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). + // This can be solved with a in the .config file. + + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProviderEx(); + GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(); + List measurements = new List(200); + List measurementsex = new List(200); + System.Diagnostics.Stopwatch timer; + + // 10 "startup" runs, followed by 200 measured runs + for (int i = -10; i < 200; i++) + { + timer = System.Diagnostics.Stopwatch.StartNew(); + sq.GetGeometriesInView(envelope); + timer.Stop(); + if (i >= 0) measurements.Add(timer.Elapsed); + + timer = System.Diagnostics.Stopwatch.StartNew(); + sqex.GetGeometriesInView(envelope); + timer.Stop(); + if (i >= 0) measurementsex.Add(timer.Elapsed); + } + + // Remove 10 slowest and 10 fastest times: + measurements = measurements.OrderBy(x => x).Skip(10).Take(measurements.Count - 20).ToList(); + measurementsex = measurementsex.OrderBy(x => x).Skip(10).Take(measurementsex.Count - 20).ToList(); + + // Average time: + TimeSpan avg = TimeSpan.FromTicks((long)measurements.Average(x => x.Ticks)); + TimeSpan avgex = TimeSpan.FromTicks((long)measurementsex.Average(x => x.Ticks)); + + // The SqlServer2008Ex provider should be faster: + Assert.Less(avgex, avg); + } + [NUnit.Framework.Test()] public void TestGetObjectIDsInView() { From 9d56bbd09ed1e6f02b03dd74f53206775c9b6b33 Mon Sep 17 00:00:00 2001 From: Saeed Kazemi Date: Sun, 30 Sep 2018 12:36:40 +0330 Subject: [PATCH 058/186] Fix concurrency issue while accessing _mapTransform in MapViewport (#115) * Access to _mapTransform and its inverse no longer depend on locking mechanism * Check matrix identity logic to apply transforms. --- SharpMap/Map/MapViewport.cs | 84 +++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index 08f82402..e4267808 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -17,8 +17,11 @@ public class MapViewport private readonly Envelope _envelope; private readonly Coordinate _center; - private readonly Matrix _mapTransform; - private readonly Matrix _mapTransformInverted; + //private readonly Matrix _mapTransform; + //private readonly Matrix _mapTransformInverted; + + private readonly float[] _mapTransformElements; + private readonly float[] _mapTransformInvertedElements; private readonly double _left; private readonly double _top; @@ -55,8 +58,11 @@ public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAs MapHeight = Zoom*pixelAspectRatio; // already cloned - _mapTransform = mapTransform; - _mapTransformInverted = mapTransformInverted; + //_mapTransform = mapTransform; + //_mapTransformInverted = mapTransformInverted; + + _mapTransformElements = mapTransform.Elements; + _mapTransformInvertedElements = mapTransformInverted.Elements; double height = (Zoom * Size.Height) / Size.Width; _left = Center.X - Zoom * 0.5; @@ -101,7 +107,40 @@ public Envelope Envelope /// public Matrix MapTransform { - get { return _mapTransform.Clone(); } + get + { + //lock (_mapTransform) + //{ + // return _mapTransform.Clone(); + //} + return new Matrix( + _mapTransformElements[0], + _mapTransformElements[1], + _mapTransformElements[2], + _mapTransformElements[3], + _mapTransformElements[4], + _mapTransformElements[5] + ); + } + } + + /// + /// Gets a value indicating the inverse transformation that is applied when + /// rendering the map + /// + public Matrix MapTransformInverted + { + get + { + return new Matrix( + _mapTransformInvertedElements[0], + _mapTransformInvertedElements[1], + _mapTransformInvertedElements[2], + _mapTransformInvertedElements[3], + _mapTransformInvertedElements[4], + _mapTransformInvertedElements[5] + ); + } } /// @@ -166,7 +205,7 @@ public double GetMapScale(int dpi) { _mapScale = ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); _lastDpi = dpi; - } + } return _mapScale; } } @@ -184,17 +223,18 @@ public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) if (!careAboutMapTransform) return pTmp; - Monitor.Enter(_mapTransform); - if (_mapTransform.IsIdentity) + var pts = new[] { pTmp }; + //Monitor.Enter(_mapTransform); + using (var mapTransform = MapTransform) { - var pts = new[] {pTmp}; - _mapTransform.TransformPoints(pts); - pTmp = pts[0]; + if (mapTransform.IsIdentity == false) + { + mapTransform.TransformPoints(pts); + } } - Monitor.Exit(_mapTransform); + //Monitor.Exit(_mapTransform); - - return pTmp; + return pts[0]; } /// @@ -238,16 +278,18 @@ public Coordinate ImageToWorld(PointF p) /// Point in world coordinates public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) { - Monitor.Enter(_mapTransformInverted); - if (_mapTransformInverted.IsIdentity) + var pts = new[] { p }; + //Monitor.Enter(_mapTransformInverted); + using (var mapTransformInverted = MapTransformInverted) { - var pts = new[] { p }; - _mapTransformInverted.TransformPoints(pts); - p = pts[0]; + if (mapTransformInverted.IsIdentity == false) + { + mapTransformInverted.TransformPoints(pts); + } } - Monitor.Exit(_mapTransformInverted); + //Monitor.Exit(_mapTransformInverted); - return Transform.MapToWorld(p, this); + return Transform.MapToWorld(pts[0], this); } /// From fdb61e5cb4133000f903ba40f8f0bb4d95bead39 Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Tue, 23 Oct 2018 11:35:24 +0200 Subject: [PATCH 059/186] Refactor towards .Net Standard (#114) * Transform SharpMap.csproj into new dotnet sdk project file * Delete obsolete files (SharpMap.Geometries) * Add internal KnownColor enum for netStandard20 to reproduce System.Drawing.Color.FromKnownColor * Add post-build event to create SharedAssemblyVersion.cs * Fix nuget package version * Fix build on Linux * Adjust .travis.yml * Check 'ReleaseLinux' configuration * Refactor SharpMap.Layers.BruTile towards netStandard * Adjust unit tests (missing resources) * Make SpatialReference.cs download SpatialRefSys.xml when not present. * Remove DemoWebSite from solution * Fix directory seperator problem in file paths * Add some test data * Complete build script * Update System.Data.SQLite.Core * Update System.Web.Mvc for SharpMap.Demo.Wms * Fix more path problems * Use Trace.WriteLine in favor of Console.WriteLine * Disable logging for UnitTests project * Fix/Disable unit tests for build on Linux * Fix PostBuild event for Windows OS * Fix project build hierarchy * Add SharpMap.Common.props for SDK projects * Wire SharpMap.Common.props with SharpMap, SharpMap.Layers.BruTile and SharpMap.Utilities.Indexing.SbnTree * Delete obsolete AssemblyInfo.cs files * Transfrom GeoPackage int dotnet SDK project * Remove System.Data.SQLite v1.0.94 dependency * Fix SharpMap.Data.FileGdbProvider's post build event * Fix creation of SharedAssemblyVersion.cs --- .travis.yml | 12 +- Examples/DemoWebSite/Web.Config | 2 +- .../EnsureVisibleSample.cs | 43 +- .../SharpMap.Demo.Wms.csproj | 50 +- Examples/SharpMap.Demo.Wms/Web.config | 78 +- Examples/SharpMap.Demo.Wms/packages.config | 26 +- Examples/WinFormSamples/WinFormSamples.csproj | 29 +- Examples/WinFormSamples/app.config | 2 +- Examples/WinFormSamples/packages.config | 10 +- SharpMap.Common.props | 38 + .../SharpMap.Data.Providers.FileGdb.csproj | 4 +- .../Properties/AssemblyInfo.cs | 23 - .../SharpMap.Data.Providers.GeoPackage.csproj | 148 +-- .../Tiles/GpkgTileSource.cs | 6 +- SharpMap.Data.Providers.GeoPackage/app.config | 8 +- .../packages.config | 2 +- .../SharpMap.Extensions.x86.csproj | 22 +- SharpMap.Extensions.x86/packages.config | 6 +- .../SharpMap.Extensions.csproj | 30 +- SharpMap.Extensions/packages.config | 6 +- SharpMap.Layers.BruTile/Layers/TileLayer.cs | 6 +- .../Properties/AssemblyInfo.cs | 23 - .../SharpMap.Layers.BruTile.bak | 127 +++ .../SharpMap.Layers.BruTile.csproj | 152 +-- .../Utilities/Web/OsmRequestSurrogate.cs | 96 +- SharpMap.Layers.BruTile/packages.config | 4 +- .../SharpMap.Serialization.csproj | 10 +- SharpMap.Serialization/packages.config | 4 +- SharpMap.UI/SharpMap.UI.csproj | 32 +- SharpMap.UI/packages.config | 6 +- .../Properties/AssemblyInfo.cs | 36 - ...SharpMap.Utilities.Indexing.SbnTree.csproj | 92 +- SharpMap.sln | 167 ++-- SharpMap.targets | 10 +- .../SqlGeometryConverter.cs | 232 ----- .../WellKnownText/SpatialReference.cs | 54 +- SharpMap/Data/Providers/MsSql.cs | 2 +- SharpMap/Data/Providers/MsSqlSpatial.cs | 3 +- SharpMap/Data/Providers/OleDbPoint.cs | 4 +- SharpMap/Data/Providers/OleDbTwoPointLine.cs | 6 +- SharpMap/Drawing/Color.cs | 28 + SharpMap/Drawing/KnownColor.cs | 904 ++++++++++++++++++ SharpMap/Geometries/BoundingBox.cs | 664 ------------- SharpMap/Geometries/Curve.cs | 78 -- SharpMap/Geometries/GeoAPIEx.cs | 2 - SharpMap/Geometries/Geometry.cs | 350 ------- SharpMap/Geometries/GeometryCollection.cs | 301 ------ SharpMap/Geometries/GeometryType.cs | 81 -- SharpMap/Geometries/IGeometry.cs | 213 ----- SharpMap/Geometries/IGeometryCollection.cs | 37 - SharpMap/Geometries/IPuntal.cs | 38 - SharpMap/Geometries/ISpatialReference.cs | 28 - SharpMap/Geometries/LineString.cs | 399 -------- SharpMap/Geometries/LinearRing.cs | 174 ---- SharpMap/Geometries/MultiCurve.cs | 64 -- SharpMap/Geometries/MultiLineString.cs | 307 ------ SharpMap/Geometries/MultiPoint.cs | 247 ----- SharpMap/Geometries/MultiPolygon.cs | 263 ----- SharpMap/Geometries/MultiSurface.cs | 65 -- SharpMap/Geometries/Point.cs | 492 ---------- SharpMap/Geometries/Point3D.cs | 250 ----- SharpMap/Geometries/Polygon.cs | 331 ------- SharpMap/Geometries/SpatialRelations.cs | 140 --- SharpMap/Geometries/Surface.cs | 70 -- SharpMap/Properties/AssemblyInfo.cs | 44 - .../Decoration/GoogleMapsDisclamer.cs | 319 ------ SharpMap/Rendering/Symbolizer/Utility.cs | 39 +- SharpMap/SharpMap.csproj | 405 +------- SharpMap/SharpMap.csproj.bak | 380 ++++++++ SharpMap/Styles/VectorStyle.cs | 22 +- SharpMap/Utilities/Algorithms.cs | 109 --- SharpMap/Utilities/CGAlgoritm.cs | 292 ------ UnitTests/Converters/SqlServer2008.cs | 12 +- UnitTests/Converters/WKB/WKBTests.cs | 10 +- .../Converters/WKT/SpatialReferenceTests.cs | 4 +- UnitTests/Data/FeatureDataSetTests.cs | 9 + UnitTests/Data/Providers/DbTests.cs | 4 +- UnitTests/Data/Providers/DbaseReaderTests.cs | 2 +- UnitTests/Data/Providers/GeoPackageTest.cs | 23 +- .../Providers/GeometryFeatureProviderTest.cs | 13 +- UnitTests/Data/Providers/KmlProviderTests.cs | 4 +- .../Data/Providers/ManagedSQLiteTests.cs | 15 +- UnitTests/Data/Providers/NtsProviderTests.cs | 6 +- UnitTests/Data/Providers/OgrProviderTest.cs | 14 +- .../Data/Providers/PostGisGeographyTests.cs | 4 +- UnitTests/Data/Providers/ProviderTest.cs | 5 +- .../Data/Providers/ShapeFileProviderTests.cs | 41 +- UnitTests/Data/Providers/ThreadingTest.cs | 43 +- UnitTests/GeoApiExTests.cs | 4 +- .../Layers/CoordinateTransformationTest.cs | 11 +- UnitTests/Layers/GdiImageLayerTest.cs | 6 +- UnitTests/Layers/LayerTest.cs | 11 + UnitTests/Properties/Resources.Designer.cs | 123 +-- UnitTests/Properties/Resources.resx | 3 - UnitTests/Properties/Settings.Designer.cs | 15 +- UnitTests/Properties/Settings.settings | 12 +- .../Rendering/GroupStyle/GroupStyleTests.cs | 156 +-- .../Symbolizer/LineSymbolizerTest.cs | 24 +- .../Symbolizer/PointSymbolizerTest.cs | 9 +- .../Symbolizer/PolygonSymbolizerTest.cs | 17 +- .../Symbolizer/RasterPointSymbolizerTest.cs | 2 +- UnitTests/Serialization/LayerTest.cs | 9 +- .../Serialization/MapDocSerializationTests.cs | 21 +- UnitTests/Serialization/MapTest.cs | 10 +- UnitTests/Serialization/ProviderTest.cs | 16 +- UnitTests/Serialization/ReflectionTests.cs | 16 +- UnitTests/Serialization/SerializationTests.cs | 17 +- UnitTests/Serialization/StylesTest.cs | 5 +- UnitTests/Serialization/SurrogatesTest.cs | 57 +- UnitTests/TestData/CreatingData.cs | 4 +- UnitTests/TestData/gdal_sample.gpkg | Bin 0 -> 142336 bytes UnitTests/UnitTests.csproj | 56 +- UnitTests/WMS/Encoding.cs | 10 +- UnitTests/app.config | 11 +- UnitTests/packages.config | 2 +- 115 files changed, 2453 insertions(+), 7130 deletions(-) create mode 100644 SharpMap.Common.props delete mode 100644 SharpMap.Data.Providers.GeoPackage/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Layers.BruTile/Properties/AssemblyInfo.cs create mode 100644 SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.bak delete mode 100644 SharpMap.Utilities.Indexing.SbnTree/Properties/AssemblyInfo.cs delete mode 100644 SharpMap/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs create mode 100644 SharpMap/Drawing/Color.cs create mode 100644 SharpMap/Drawing/KnownColor.cs delete mode 100644 SharpMap/Geometries/BoundingBox.cs delete mode 100644 SharpMap/Geometries/Curve.cs delete mode 100644 SharpMap/Geometries/Geometry.cs delete mode 100644 SharpMap/Geometries/GeometryCollection.cs delete mode 100644 SharpMap/Geometries/GeometryType.cs delete mode 100644 SharpMap/Geometries/IGeometry.cs delete mode 100644 SharpMap/Geometries/IGeometryCollection.cs delete mode 100644 SharpMap/Geometries/IPuntal.cs delete mode 100644 SharpMap/Geometries/ISpatialReference.cs delete mode 100644 SharpMap/Geometries/LineString.cs delete mode 100644 SharpMap/Geometries/LinearRing.cs delete mode 100644 SharpMap/Geometries/MultiCurve.cs delete mode 100644 SharpMap/Geometries/MultiLineString.cs delete mode 100644 SharpMap/Geometries/MultiPoint.cs delete mode 100644 SharpMap/Geometries/MultiPolygon.cs delete mode 100644 SharpMap/Geometries/MultiSurface.cs delete mode 100644 SharpMap/Geometries/Point.cs delete mode 100644 SharpMap/Geometries/Point3D.cs delete mode 100644 SharpMap/Geometries/Polygon.cs delete mode 100644 SharpMap/Geometries/SpatialRelations.cs delete mode 100644 SharpMap/Geometries/Surface.cs delete mode 100644 SharpMap/Properties/AssemblyInfo.cs delete mode 100644 SharpMap/Rendering/Decoration/GoogleMapsDisclamer.cs create mode 100644 SharpMap/SharpMap.csproj.bak delete mode 100644 SharpMap/Utilities/Algorithms.cs delete mode 100644 SharpMap/Utilities/CGAlgoritm.cs create mode 100644 UnitTests/TestData/gdal_sample.gpkg diff --git a/.travis.yml b/.travis.yml index 7de0e3e7..f341a2b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,11 @@ language: csharp -solution: SharpMap.sln +mono: latest +dotnet: 2.1.402 install: - - nuget restore SharpMap.sln - - nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner +- nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner script: - - xbuild SharpMap.sln /p:Configuration=ReleaseLinux;UseTools35=false +- nuget restore SharpMap.sln +- dotnet msbuild SharpMap.targets /t:Version /p:UseTools35=false /v:minimal +- dotnet msbuild SharpMap.sln /m "/t:Restore;Build" /p:Configuration=ReleaseLinux "/p:Platform=Any CPU" /p:UseTools35=false "/p:FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/" /v:minimal /p:WarningLevel=3 +- cp SharpMap/SpatialRefSys.xml UnitTests/bin/ +- mono testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe --nothread UnitTests/bin/UnitTests.dll diff --git a/Examples/DemoWebSite/Web.Config b/Examples/DemoWebSite/Web.Config index c2fc5823..51676fb0 100644 --- a/Examples/DemoWebSite/Web.Config +++ b/Examples/DemoWebSite/Web.Config @@ -83,7 +83,7 @@ - + diff --git a/Examples/ExampleCodeSnippets/EnsureVisibleSample.cs b/Examples/ExampleCodeSnippets/EnsureVisibleSample.cs index a1a9ae1e..ef90d5f3 100644 --- a/Examples/ExampleCodeSnippets/EnsureVisibleSample.cs +++ b/Examples/ExampleCodeSnippets/EnsureVisibleSample.cs @@ -1,5 +1,8 @@ +using System; +using System.Drawing; using GeoAPI.Geometries; +using NUnit.Framework; namespace ExampleCodeSnippets { @@ -94,9 +97,43 @@ public void TestEnsureVisible() EnsureVisible(map, new GeoAPI.Geometries.Coordinate(15, -20)); System.Console.WriteLine(map.Center); } - } - + [Test, Ignore] + public void CreateKnownColors() + { + Console.WriteLine("/// "); + Console.WriteLine("/// Attribute class to associate ARGB value with "); + Console.WriteLine("[System.AttributeUsage(System.AttributeTargets.Field)]"); + Console.WriteLine("internal class ArgbValueAttribute : System.Attribute\n{"); + Console.WriteLine(" /// "); + Console.WriteLine(" /// Creates an instance of this class"); + Console.WriteLine(" /// "); + Console.WriteLine(" /// The ARBB value"); + Console.WriteLine(" public ArgbValueAttribute(int argb)\n {"); + Console.WriteLine(" Argb = argb;\n }"); + Console.WriteLine(" /// "); + Console.WriteLine(" /// Gets a value indicating the ARGB value"); + Console.WriteLine(" /// "); + Console.WriteLine(" public int Argb { get; }"); + Console.WriteLine("}"); + + Console.WriteLine("/// "); + Console.WriteLine("/// Straight copy of names"); + Console.WriteLine("/// "); + Console.WriteLine("internal enum KnownColor\n{"); + foreach (System.Drawing.KnownColor knownColor in System.Enum.GetValues(typeof(System.Drawing.KnownColor))) + { + string knownColorName = Enum.GetName(typeof(System.Drawing.KnownColor), knownColor); + Console.WriteLine("\t/// "); + Console.WriteLine("\t/// Color {0} (#{1:X})", knownColorName, 0x00FFFFFF & Color.FromKnownColor(knownColor).ToArgb()); + Console.WriteLine("\t/// "); + Console.WriteLine("\t[ArgbValue({0})]", Color.FromKnownColor(knownColor).ToArgb()); + Console.WriteLine("\t{0} = {1},", knownColorName, (int)knownColor); + } + Console.WriteLine("}"); + } + } -} \ No newline at end of file +} diff --git a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj index f2d51024..577d27cf 100644 --- a/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj +++ b/Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj @@ -1,16 +1,16 @@  - + Debug AnyCPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66} - {E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library Properties SharpMap.Demo.Wms SharpMap.Demo.Wms - v4.0 + v4.5.2 false @@ -27,6 +27,8 @@ true + + true @@ -71,9 +73,8 @@ - - False - ..\..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net45\System.Data.SQLite.dll + + ..\..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net451\System.Data.SQLite.dll @@ -83,32 +84,25 @@ - - True - ..\..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.Helpers.dll + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.Helpers.dll - - False - ..\..\Packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll + + ..\..\packages\Microsoft.AspNet.Mvc.5.2.6\lib\net45\System.Web.Mvc.dll - - True - ..\..\packages\Microsoft.AspNet.Razor.1.0.20105.408\lib\net40\System.Web.Razor.dll + + ..\..\packages\Microsoft.AspNet.Razor.3.2.6\lib\net45\System.Web.Razor.dll - 3.5 - - True - ..\..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.dll + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.dll - - True - ..\..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Deployment.dll + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Deployment.dll - - True - ..\..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Razor.dll @@ -754,11 +748,11 @@ - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - + - \ No newline at end of file + + diff --git a/Examples/SharpMap.Demo.Wms/Web.config b/Examples/SharpMap.Demo.Wms/Web.config index df67d70a..80255561 100644 --- a/Examples/SharpMap.Demo.Wms/Web.config +++ b/Examples/SharpMap.Demo.Wms/Web.config @@ -1,63 +1,75 @@ - + - + - - + + + - + - - - - + + + + - - - - - - + + + + + + - + - + - - + + - - - + + + + + + + - - + + - - + + - - - - - - + + - \ No newline at end of file + diff --git a/Examples/SharpMap.Demo.Wms/packages.config b/Examples/SharpMap.Demo.Wms/packages.config index bcdc4d92..1e5d99be 100644 --- a/Examples/SharpMap.Demo.Wms/packages.config +++ b/Examples/SharpMap.Demo.Wms/packages.config @@ -1,16 +1,16 @@  - - - - - - + + + + + + - - - - - - - \ No newline at end of file + + + + + + + diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index ce5ab871..26c3066b 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -69,17 +69,14 @@ ..\..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll True - - ..\..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True + + ..\..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - ..\..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True + + ..\..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll - - ..\..\packages\Common.Logging.Log4Net1213.3.3.1\lib\net40\Common.Logging.Log4Net1213.dll - True + + ..\..\packages\Common.Logging.Log4Net207.3.4.1\lib\net40\Common.Logging.Log4Net207.dll ..\..\packages\GDAL.1.11.1\lib\net40\gdalconst_csharp.dll @@ -95,9 +92,8 @@ ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\..\packages\log4net.2.0.0\lib\net40-full\log4net.dll - True + + ..\..\packages\log4net.2.0.7\lib\net40-full\log4net.dll ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll @@ -119,9 +115,8 @@ - - ..\..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll - True + + ..\..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll @@ -587,15 +582,15 @@ - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - + + + + .NETFramework + Client + v4.0 + + + + + 1 + 2 + 0 + 0 + + + + true + + + + net452 + + + + SharpMap - Team + git + https://github.com/SharpMap/SharpMap + https://github.com/SharpMap/SharpMap.git + https://avatars1.githubusercontent.com/u/8349804??v=3&amp;s=120 + https://raw.githubusercontent.com/SharpMap/SharpMap/Branches/1.0/license.txt + true + $(Major).$(Minor).$(Build) + $(Major).$(Minor).$(Build).$(Revision) + $(Major).$(Minor).$(Build)-pre1 + + + diff --git a/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj b/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj index c03b337d..a8cb08c1 100644 --- a/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj +++ b/SharpMap.Data.Providers.FileGdb/SharpMap.Data.Providers.FileGdb.csproj @@ -2,7 +2,7 @@ Debug - AnyCPU + x86 {42AD06D5-ACDF-4991-B052-232235F002BA} Library Properties @@ -134,6 +134,6 @@ bin64 - XCOPY /d /q $(ProjectDir)Libraries\$(NativeLibs)\FileGDB*.* $(OutDir) + XCOPY /d /q "$(ProjectDir)Libraries\$(NativeLibs)\FileGDB*.*" $(OutDir) \ No newline at end of file diff --git a/SharpMap.Data.Providers.GeoPackage/Properties/AssemblyInfo.cs b/SharpMap.Data.Providers.GeoPackage/Properties/AssemblyInfo.cs deleted file mode 100644 index 40d9733e..00000000 --- a/SharpMap.Data.Providers.GeoPackage/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. -[assembly: AssemblyTitle("SharpMap.Data.Providers.GeoPackage")] -[assembly: AssemblyDescription("SharpMap Provider to OGC's GeoPackage")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SharpMap.Data.Providers.GeoPackage")] -[assembly: AssemblyCopyright("Copyright © SharpMap - Team 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("1a2c0304-b834-4cee-ab17-8185589e3a1f")] diff --git a/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj b/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj index 007e8b02..6197dd95 100644 --- a/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj +++ b/SharpMap.Data.Providers.GeoPackage/SharpMap.Data.Providers.GeoPackage.csproj @@ -1,129 +1,23 @@ - - - - - Debug - AnyCPU - {AF0594AB-FC1D-47E4-8CDD-361CDC621A36} - Library - Properties - SharpMap.Data.Providers - SharpMap.Data.Providers.GeoPackage - v4.0 - 512 - ..\ - Client - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\SharpMap.Data.Providers.GeoPackage.XML - - - - ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll - True - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - - - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - - - - True - True - Resources.resx - - - - - - - - Designer - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - + + + + - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + net40-client;net452;netstandard2.0 + SharpMap.Data.Providers + SharpMap.Data.Providers.GeoPackage + Copyright 2014 SharpMap - Team + geopackage + This package contains a GeoPackage solution for SharpMap. - - - - - - - {d84f31ed-3d81-42f2-9190-3d021d6038a0} - SharpMap.Layers.BruTile - - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - - - \ No newline at end of file + + + + + + + + + + + diff --git a/SharpMap.Data.Providers.GeoPackage/Tiles/GpkgTileSource.cs b/SharpMap.Data.Providers.GeoPackage/Tiles/GpkgTileSource.cs index 21c9aedc..001a817b 100644 --- a/SharpMap.Data.Providers.GeoPackage/Tiles/GpkgTileSource.cs +++ b/SharpMap.Data.Providers.GeoPackage/Tiles/GpkgTileSource.cs @@ -41,5 +41,9 @@ public string Name { get { return string.Format("{0} ({1})", _content.Identifier, _content.TableName); } } + +#if !NET40 + public Attribution Attribution { get; set; } +#endif } -} \ No newline at end of file +} diff --git a/SharpMap.Data.Providers.GeoPackage/app.config b/SharpMap.Data.Providers.GeoPackage/app.config index ceccc166..190a8150 100644 --- a/SharpMap.Data.Providers.GeoPackage/app.config +++ b/SharpMap.Data.Providers.GeoPackage/app.config @@ -4,16 +4,16 @@ - + - + - + - \ No newline at end of file + diff --git a/SharpMap.Data.Providers.GeoPackage/packages.config b/SharpMap.Data.Providers.GeoPackage/packages.config index a3b7b47c..44c7fbcb 100644 --- a/SharpMap.Data.Providers.GeoPackage/packages.config +++ b/SharpMap.Data.Providers.GeoPackage/packages.config @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj b/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj index 1ecae41d..d0596128 100644 --- a/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj +++ b/SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj @@ -13,6 +13,8 @@ 512 Client ..\ + + true @@ -38,13 +40,11 @@ false - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True + + ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True + + ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll @@ -60,8 +60,8 @@ - - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll + + ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll @@ -94,12 +94,12 @@ - + - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + + \ No newline at end of file diff --git a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj index ae9ceb7b..fcf2112a 100644 --- a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj +++ b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.csproj @@ -1,129 +1,27 @@ - - - - - Debug - AnyCPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0} - Library - Properties - SharpMap - SharpMap.Layers.BruTile - v4.0 - 512 - Client - ..\ - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\SharpMap.Layers.BruTile.XML - - - - ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll - True - - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True - - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - - - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll - True - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - - - - - - - - - - - - - - - - - - {c83777fc-aabb-47d9-911f-d76255d4d541} - SharpMap - - - - - - - Designer - - - - + + + + - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + net40-client;net452;netstandard2.0 + SharpMap + Copyright (c) 2011 - 2018 SharpMap - Team + brutile basemap + The package contains a base map layer solution based on BruTile. - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/SharpMap.Layers.BruTile/Utilities/Web/OsmRequestSurrogate.cs b/SharpMap.Layers.BruTile/Utilities/Web/OsmRequestSurrogate.cs index be74ba5b..3c9b757d 100644 --- a/SharpMap.Layers.BruTile/Utilities/Web/OsmRequestSurrogate.cs +++ b/SharpMap.Layers.BruTile/Utilities/Web/OsmRequestSurrogate.cs @@ -5,51 +5,51 @@ namespace BruTile.Web { - [Obsolete] - internal class OsmRequestSurrogate : ISerializationSurrogate - { - #region Implementation of ISerializationSurrogate - - public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) - { - var or = (OsmRequest)obj; - info.AddValue("config", or.OsmConfig); - } - - public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) - { - Utility.SetFieldValue(ref obj, "OsmConfig", BindingFlags.Public | BindingFlags.Instance, info.GetValue("config", typeof(OsmTileServerConfig))); - return obj; - } - - #endregion - } - - [Obsolete] - public class OsmTileServerConfigSurrogate : ISerializationSurrogate - { - #region Implementation of ISerializationSurrogate - - public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) - { - var oc = (OsmTileServerConfig)obj; - info.AddValue("urlFormat", oc.UrlFormat); - info.AddValue("serverCount", oc.NumberOfServers); - info.AddValue("serverIdentifier", oc.ServerIdentifier); - info.AddValue("min", oc.MinResolution); - info.AddValue("max", oc.MaxResolution); - } - - public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) - { - Utility.SetFieldValue(ref obj, "UrlFormat", BindingFlags.Public | BindingFlags.Instance, info.GetString("urlFormat")); - Utility.SetFieldValue(ref obj, "NumberOfServers", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("serverCount")); - Utility.SetFieldValue(ref obj, "ServerIdentifier", BindingFlags.Public | BindingFlags.Instance, info.GetValue("serverIdentifier", typeof(string[]))); - Utility.SetFieldValue(ref obj, "MinResolution", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("min")); - Utility.SetFieldValue(ref obj, "MaxResolution", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("max")); - return obj; - } - - #endregion - } -} \ No newline at end of file + //[Obsolete] + //internal class OsmRequestSurrogate : ISerializationSurrogate + //{ + // #region Implementation of ISerializationSurrogate + + // public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) + // { + // var or = (OsmRequest)obj; + // info.AddValue("config", or.OsmConfig); + // } + + // public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) + // { + // Utility.SetFieldValue(ref obj, "OsmConfig", BindingFlags.Public | BindingFlags.Instance, info.GetValue("config", typeof(OsmTileServerConfig))); + // return obj; + // } + + // #endregion + //} + + //[Obsolete] + //public class OsmTileServerConfigSurrogate : ISerializationSurrogate + //{ + // #region Implementation of ISerializationSurrogate + + // public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) + // { + // var oc = (OsmTileServerConfig)obj; + // info.AddValue("urlFormat", oc.UrlFormat); + // info.AddValue("serverCount", oc.NumberOfServers); + // info.AddValue("serverIdentifier", oc.ServerIdentifier); + // info.AddValue("min", oc.MinResolution); + // info.AddValue("max", oc.MaxResolution); + // } + + // public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) + // { + // Utility.SetFieldValue(ref obj, "UrlFormat", BindingFlags.Public | BindingFlags.Instance, info.GetString("urlFormat")); + // Utility.SetFieldValue(ref obj, "NumberOfServers", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("serverCount")); + // Utility.SetFieldValue(ref obj, "ServerIdentifier", BindingFlags.Public | BindingFlags.Instance, info.GetValue("serverIdentifier", typeof(string[]))); + // Utility.SetFieldValue(ref obj, "MinResolution", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("min")); + // Utility.SetFieldValue(ref obj, "MaxResolution", BindingFlags.Public | BindingFlags.Instance, info.GetInt32("max")); + // return obj; + // } + + // #endregion + //} +} diff --git a/SharpMap.Layers.BruTile/packages.config b/SharpMap.Layers.BruTile/packages.config index 45aafcef..9d990273 100644 --- a/SharpMap.Layers.BruTile/packages.config +++ b/SharpMap.Layers.BruTile/packages.config @@ -2,8 +2,8 @@ - - + + diff --git a/SharpMap.Serialization/SharpMap.Serialization.csproj b/SharpMap.Serialization/SharpMap.Serialization.csproj index ea4a9808..ad2cd2eb 100644 --- a/SharpMap.Serialization/SharpMap.Serialization.csproj +++ b/SharpMap.Serialization/SharpMap.Serialization.csproj @@ -39,13 +39,11 @@ ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll True - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True + + ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True + + ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll diff --git a/SharpMap.Serialization/packages.config b/SharpMap.Serialization/packages.config index e0f96776..add3ee31 100644 --- a/SharpMap.Serialization/packages.config +++ b/SharpMap.Serialization/packages.config @@ -1,8 +1,8 @@  - - + + diff --git a/SharpMap.UI/SharpMap.UI.csproj b/SharpMap.UI/SharpMap.UI.csproj index 81662a4a..2de1f91d 100644 --- a/SharpMap.UI/SharpMap.UI.csproj +++ b/SharpMap.UI/SharpMap.UI.csproj @@ -16,6 +16,8 @@ v4.0 Client ..\ + + true @@ -41,13 +43,11 @@ false - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True + + ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True + + ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll @@ -66,12 +66,12 @@ + + ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll + - - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll - @@ -563,13 +563,6 @@ - - - - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - - - - - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - - - \ No newline at end of file + + + + + + net40-client;net452;netstandard2.0 + Copyright (c) 2014 - 2018 SharpMap - Team + index sbn shapefile + The package contains a shapefile spatial indexing solution base on SharpSbn + + + + + + + + + + + diff --git a/SharpMap.sln b/SharpMap.sln index 9e5988c4..9af93dc7 100644 --- a/SharpMap.sln +++ b/SharpMap.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2019 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildTools", "BuildTools", "{8E57A35D-CD7B-4EEE-98BF-0E414F1A4E44}" ProjectSection(SolutionItems) = preProject @@ -19,13 +19,13 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{A5E400B4-8360-4259-BDDD-292A134D14CC}" ProjectSection(SolutionItems) = preProject .travis.yml = .travis.yml + SharpMap.Common.props = SharpMap.Common.props SharpMap.proj = SharpMap.proj SharpMap.targets = SharpMap.targets EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{AEBB513B-1509-439F-BA86-FA9413BF8D8C}" ProjectSection(SolutionItems) = preProject - Performance1.psess = Performance1.psess SharpMap.sln.DotSettings = SharpMap.sln.DotSettings EndProjectSection EndProject @@ -48,39 +48,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuspec", ".nuspec", "{4A4D SharpMap.Web.nuspec = SharpMap.Web.nuspec EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap", "SharpMap\SharpMap.csproj", "{C83777FC-AABB-47D9-911F-D76255D4D541}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMap", "SharpMap\SharpMap.csproj", "{C83777FC-AABB-47D9-911F-D76255D4D541}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.UI", "SharpMap.UI\SharpMap.UI.csproj", "{DD1CC1DB-4BF9-4C88-A100-733D84795F3A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}" EndProject -Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "DemoWebSite", "Examples\DemoWebSite\", "{32ECD993-CB5A-4AD9-8C8F-45C73A088C13}" - ProjectSection(WebsiteProperties) = preProject - SccProjectName = "Svn" - SccAuxPath = "Svn" - SccLocalPath = "Svn" - SccProvider = "SubversionScc" - TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" - ProjectReferences = "{C83777FC-AABB-47D9-911F-D76255D4D541}|SharpMap.dll;{A4140C12-53F5-438C-8D24-9E48C504FECF}|SharpMap.Extensions.dll;{292ef671-4063-4952-8de0-423df72a0950}|SharpMap.Web.dll;{9961698e-4ee0-4a3b-84b7-a23e69e0c13c}|SharpMap.Extensions.x86.dll;{721412E1-5589-4A18-A095-F8E0427BB163}|SharpMap.Converters.GeoJSON.dll;" - Debug.AspNetCompiler.VirtualPath = "/DemoWebSite" - Debug.AspNetCompiler.PhysicalPath = "Examples\DemoWebSite\" - Debug.AspNetCompiler.TargetPath = "Examples\PrecompiledWeb\DemoWebSite\" - Debug.AspNetCompiler.Updateable = "true" - Debug.AspNetCompiler.ForceOverwrite = "true" - Debug.AspNetCompiler.FixedNames = "true" - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.VirtualPath = "/DemoWebSite" - Release.AspNetCompiler.PhysicalPath = "Examples\DemoWebSite\" - Release.AspNetCompiler.TargetPath = "Examples\PrecompiledWeb\DemoWebSite\" - Release.AspNetCompiler.Updateable = "true" - Release.AspNetCompiler.ForceOverwrite = "true" - Release.AspNetCompiler.FixedNames = "true" - Release.AspNetCompiler.Debug = "False" - VWDPort = "52193" - SlnRelativePath = "Examples\DemoWebSite\" - StartServerOnDebug = "false" - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Extensions", "SharpMap.Extensions\SharpMap.Extensions.csproj", "{A4140C12-53F5-438C-8D24-9E48C504FECF}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoWinForm", "Examples\DemoWinForm\DemoWinForm.csproj", "{73A45373-6307-4D39-9FE9-E8803F95FAB6}" @@ -109,21 +82,27 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.UI.WPF", "SharpMap EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFSamples", "Examples\WPFSamples\WPFSamples.csproj", "{28AC314E-35C1-484B-9DD3-116BD8AFC4EA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Utilities.Indexing.SbnTree", "SharpMap.Utilities.Indexing.SbnTree\SharpMap.Utilities.Indexing.SbnTree.csproj", "{723F9FD5-8424-4EEE-BA92-57ECEE0F395D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMap.Utilities.Indexing.SbnTree", "SharpMap.Utilities.Indexing.SbnTree\SharpMap.Utilities.Indexing.SbnTree.csproj", "{723F9FD5-8424-4EEE-BA92-57ECEE0F395D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Data.Providers.FileGdb", "SharpMap.Data.Providers.FileGdb\SharpMap.Data.Providers.FileGdb.csproj", "{42AD06D5-ACDF-4991-B052-232235F002BA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Data.Providers.GeoPackage", "SharpMap.Data.Providers.GeoPackage\SharpMap.Data.Providers.GeoPackage.csproj", "{AF0594AB-FC1D-47E4-8CDD-361CDC621A36}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMap.Data.Providers.GeoPackage", "SharpMap.Data.Providers.GeoPackage\SharpMap.Data.Providers.GeoPackage.csproj", "{AF0594AB-FC1D-47E4-8CDD-361CDC621A36}" EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExampleCodeSnipplets.VB", "Examples\ExampleCodeSnipplets.VB\ExampleCodeSnipplets.VB.vbproj", "{E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Layers.BruTile", "SharpMap.Layers.BruTile\SharpMap.Layers.BruTile.csproj", "{D84F31ED-3D81-42F2-9190-3D021D6038A0}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Converters.GeoJSON", "SharpMap.Converters.GeoJSON\SharpMap.Converters.GeoJSON.csproj", "{721412E1-5589-4A18-A095-F8E0427BB163}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.Converters.Spatialite", "SharpMap.Converters.Spatialite\SharpMap.Converters.Spatialite.csproj", "{E4182B07-6955-434B-904C-15ABEA5F7409}" + ProjectSection(ProjectDependencies) = postProject + {C83777FC-AABB-47D9-911F-D76255D4D541} = {C83777FC-AABB-47D9-911F-D76255D4D541} + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpMap.CoordinateSystems.DotSpatial", "SharpMap.CoordinateSystems.DotSpatial\SharpMap.CoordinateSystems.DotSpatial.csproj", "{A019B82E-3766-44A3-907A-0487FF9EBA49}" + ProjectSection(ProjectDependencies) = postProject + {C83777FC-AABB-47D9-911F-D76255D4D541} = {C83777FC-AABB-47D9-911F-D76255D4D541} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMap.Layers.BruTile", "SharpMap.Layers.BruTile\SharpMap.Layers.BruTile.csproj", "{D84F31ED-3D81-42F2-9190-3D021D6038A0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -149,19 +128,20 @@ Global {C83777FC-AABB-47D9-911F-D76255D4D541}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Debug|x86.ActiveCfg = Debug|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|.NET.ActiveCfg = Release|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|.NET.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Any CPU.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Any CPU.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.Release|x86.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {C83777FC-AABB-47D9-911F-D76255D4D541}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Debug|.NET.ActiveCfg = Debug|Any CPU - {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Debug|.NET.Build.0 = Debug|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -175,12 +155,10 @@ Global {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.Release|x86.ActiveCfg = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {DD1CC1DB-4BF9-4C88-A100-733D84795F3A}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Debug|.NET.ActiveCfg = Debug|Any CPU - {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Debug|.NET.Build.0 = Debug|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Debug|Any CPU.Build.0 = Debug|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -192,30 +170,14 @@ Global {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Release|Mixed Platforms.Build.0 = Release|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.Release|x86.ActiveCfg = Release|Any CPU - {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU - {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU + {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|.NET.ActiveCfg = ReleaseLinux|Any CPU + {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|.NET.Build.0 = ReleaseLinux|Any CPU + {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Any CPU.ActiveCfg = ReleaseLinux|Any CPU + {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Any CPU.Build.0 = ReleaseLinux|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|.NET.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|.NET.Build.0 = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Debug|x86.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Release|.NET.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Release|Any CPU.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Release|Any CPU.Build.0 = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.Release|x86.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.ReleaseLinux|.NET.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.ReleaseLinux|Any CPU.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.ReleaseLinux|Any CPU.Build.0 = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.ReleaseLinux|Mixed Platforms.ActiveCfg = Debug|Any CPU - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13}.ReleaseLinux|x86.ActiveCfg = Debug|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.Debug|.NET.ActiveCfg = Debug|Any CPU - {A4140C12-53F5-438C-8D24-9E48C504FECF}.Debug|.NET.Build.0 = Debug|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.Debug|Any CPU.Build.0 = Debug|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -228,13 +190,13 @@ Global {A4140C12-53F5-438C-8D24-9E48C504FECF}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.Release|x86.ActiveCfg = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {A4140C12-53F5-438C-8D24-9E48C504FECF}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Debug|.NET.ActiveCfg = Debug|Any CPU - {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Debug|.NET.Build.0 = Debug|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Debug|Any CPU.Build.0 = Debug|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -248,12 +210,9 @@ Global {73A45373-6307-4D39-9FE9-E8803F95FAB6}.Release|x86.ActiveCfg = Release|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {73A45373-6307-4D39-9FE9-E8803F95FAB6}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Debug|.NET.ActiveCfg = Debug|Any CPU - {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Debug|.NET.Build.0 = Debug|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Debug|Any CPU.Build.0 = Debug|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -267,12 +226,10 @@ Global {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.Release|x86.ActiveCfg = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {F81C1843-3B2A-4D72-81AA-A658DB11FA85}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.Debug|.NET.ActiveCfg = Debug|Any CPU - {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.Debug|.NET.Build.0 = Debug|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.Debug|Any CPU.Build.0 = Debug|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -287,7 +244,6 @@ Global {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {A4184D38-C5A6-4E01-9D1C-8C63791AF825}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.Debug|.NET.ActiveCfg = Debug|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -303,7 +259,6 @@ Global {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.Release|x86.ActiveCfg = Release|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {6D681045-8EF1-44EA-A19D-C7A63A6D0F76}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.Debug|.NET.ActiveCfg = Debug|Any CPU @@ -320,7 +275,6 @@ Global {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.Release|x86.ActiveCfg = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {7EF67DF8-D868-4177-8817-4CC2E94ABD66}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU @@ -337,6 +291,7 @@ Global {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.Release|Mixed Platforms.Build.0 = Release|Any CPU {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.Release|x86.ActiveCfg = Release|Any CPU {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -355,10 +310,10 @@ Global {292EF671-4063-4952-8DE0-423DF72A0950}.Release|Mixed Platforms.Build.0 = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.Release|x86.ActiveCfg = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {292EF671-4063-4952-8DE0-423DF72A0950}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.Debug|.NET.ActiveCfg = Debug|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -374,7 +329,6 @@ Global {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.Release|x86.ActiveCfg = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {9961698E-4EE0-4A3B-84B7-A23E69E0C13C}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU @@ -391,6 +345,7 @@ Global {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.Release|Mixed Platforms.Build.0 = Release|Any CPU {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.Release|x86.ActiveCfg = Release|Any CPU {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {47F790C2-6DC0-4A09-9026-FC81A09FD6A3}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -410,9 +365,7 @@ Global {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.Release|x86.ActiveCfg = Release|Any CPU {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {9BBED556-40D8-4DDC-AC11-7B03300E2A2E}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.Debug|.NET.ActiveCfg = Debug|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -427,6 +380,7 @@ Global {F9DA6934-413F-4744-84CE-923D901F60E6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.Release|x86.ActiveCfg = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {F9DA6934-413F-4744-84CE-923D901F60E6}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {F9DA6934-413F-4744-84CE-923D901F60E6}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -447,7 +401,6 @@ Global {6DDA47A4-CE0C-4880-82CE-6EF6FEEC4912}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {6DDA47A4-CE0C-4880-82CE-6EF6FEEC4912}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {6DDA47A4-CE0C-4880-82CE-6EF6FEEC4912}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {6DDA47A4-CE0C-4880-82CE-6EF6FEEC4912}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {6DDA47A4-CE0C-4880-82CE-6EF6FEEC4912}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {28AC314E-35C1-484B-9DD3-116BD8AFC4EA}.Debug|.NET.ActiveCfg = Debug|Any CPU {28AC314E-35C1-484B-9DD3-116BD8AFC4EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -479,6 +432,7 @@ Global {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.Release|Mixed Platforms.Build.0 = Release|Any CPU {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.Release|x86.ActiveCfg = Release|Any CPU {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -486,22 +440,19 @@ Global {723F9FD5-8424-4EEE-BA92-57ECEE0F395D}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|.NET.ActiveCfg = Debug|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|Any CPU.ActiveCfg = Debug|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|Mixed Platforms.Build.0 = Debug|x64 {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|x86.ActiveCfg = Debug|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.Debug|x86.Build.0 = Debug|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|.NET.ActiveCfg = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|Any CPU.ActiveCfg = Release|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|Mixed Platforms.Build.0 = Release|x86 + {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|Mixed Platforms.Build.0 = Release|x64 {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|x86.ActiveCfg = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.Release|x86.Build.0 = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|.NET.ActiveCfg = Release|x64 - {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|.NET.Build.0 = Release|x64 {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|Any CPU.ActiveCfg = Release|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|Any CPU.Build.0 = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|x86 - {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|Mixed Platforms.Build.0 = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|x86.ActiveCfg = Release|x86 {42AD06D5-ACDF-4991-B052-232235F002BA}.ReleaseLinux|x86.Build.0 = Release|x86 {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.Debug|.NET.ActiveCfg = Debug|Any CPU @@ -517,6 +468,7 @@ Global {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.Release|Mixed Platforms.Build.0 = Release|Any CPU {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.Release|x86.ActiveCfg = Release|Any CPU {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU {AF0594AB-FC1D-47E4-8CDD-361CDC621A36}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -537,41 +489,19 @@ Global {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|.NET.ActiveCfg = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|x86.ActiveCfg = Debug|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|.NET.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Any CPU.Build.0 = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|x86.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|.NET.ActiveCfg = Debug|Any CPU - {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|.NET.Build.0 = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|Any CPU.Build.0 = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Debug|x86.ActiveCfg = Debug|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|.NET.ActiveCfg = Release|Any CPU - {721412E1-5589-4A18-A095-F8E0427BB163}.Release|.NET.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|Any CPU.ActiveCfg = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|Any CPU.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|Mixed Platforms.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.Release|x86.ActiveCfg = Release|Any CPU - {721412E1-5589-4A18-A095-F8E0427BB163}.Release|x86.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU @@ -579,22 +509,18 @@ Global {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU - {721412E1-5589-4A18-A095-F8E0427BB163}.ReleaseLinux|x86.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|.NET.ActiveCfg = Debug|Any CPU - {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|.NET.Build.0 = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|Any CPU.Build.0 = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Debug|x86.ActiveCfg = Debug|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|.NET.ActiveCfg = Release|Any CPU - {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|.NET.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|Any CPU.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|Mixed Platforms.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|x86.ActiveCfg = Release|Any CPU - {E4182B07-6955-434B-904C-15ABEA5F7409}.Release|x86.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU @@ -602,22 +528,18 @@ Global {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU - {E4182B07-6955-434B-904C-15ABEA5F7409}.ReleaseLinux|x86.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|.NET.ActiveCfg = Debug|Any CPU - {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|.NET.Build.0 = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|Any CPU.Build.0 = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Debug|x86.ActiveCfg = Debug|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|.NET.ActiveCfg = Release|Any CPU - {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|.NET.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|Any CPU.ActiveCfg = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|Any CPU.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|x86.ActiveCfg = Release|Any CPU - {A019B82E-3766-44A3-907A-0487FF9EBA49}.Release|x86.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|.NET.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU @@ -625,14 +547,34 @@ Global {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU - {A019B82E-3766-44A3-907A-0487FF9EBA49}.ReleaseLinux|x86.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|.NET.ActiveCfg = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|.NET.Build.0 = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Debug|x86.ActiveCfg = Debug|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|.NET.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|.NET.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Any CPU.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.Release|x86.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|.NET.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|.NET.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Any CPU.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Any CPU.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Mixed Platforms.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|Mixed Platforms.Build.0 = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU + {D84F31ED-3D81-42F2-9190-3D021D6038A0}.ReleaseLinux|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {4A4D9659-A105-465B-861B-1E8B52F95C4F} = {A5E400B4-8360-4259-BDDD-292A134D14CC} - {32ECD993-CB5A-4AD9-8C8F-45C73A088C13} = {480154D8-0960-416E-AE45-AF6B06794F77} {73A45373-6307-4D39-9FE9-E8803F95FAB6} = {480154D8-0960-416E-AE45-AF6B06794F77} {F81C1843-3B2A-4D72-81AA-A658DB11FA85} = {480154D8-0960-416E-AE45-AF6B06794F77} {A4184D38-C5A6-4E01-9D1C-8C63791AF825} = {480154D8-0960-416E-AE45-AF6B06794F77} @@ -640,4 +582,7 @@ Global {28AC314E-35C1-484B-9DD3-116BD8AFC4EA} = {480154D8-0960-416E-AE45-AF6B06794F77} {E9AC999C-5C90-4851-ABFE-8A9CA899FAEF} = {480154D8-0960-416E-AE45-AF6B06794F77} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E37B5837-0C9C-4732-ABE4-50B623CDA3D8} + EndGlobalSection EndGlobal diff --git a/SharpMap.targets b/SharpMap.targets index 8751b3a5..d43dfa22 100644 --- a/SharpMap.targets +++ b/SharpMap.targets @@ -3,19 +3,15 @@ $(MSBuildThisFileDirectory)BuildTools - - 1 - 2 - 0 - 0 true VersionGit VersionNoTools35 + - + @@ -40,7 +36,7 @@ <_Parameter1>$(Major).$(Minor).$(Build) - <_Parameter1>$(Major).$(Minor).$(Build) + <_Parameter1>$(Major).$(Minor).$(Build).$(Revision) <_Parameter1>$(Major).$(Minor).$(Build).9999999 diff --git a/SharpMap/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs b/SharpMap/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs deleted file mode 100644 index 5d6c24ab..00000000 --- a/SharpMap/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs +++ /dev/null @@ -1,232 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.SqlServer.Types; -using SMGeometry = SharpMap.Geometries.Geometry; -using SMGeometryType = SharpMap.Geometries.GeometryType2; -using SMPoint = SharpMap.Geometries.Point; -using SMLineString = SharpMap.Geometries.LineString; -using SMLinearRing = SharpMap.Geometries.LinearRing; -using SMPolygon = SharpMap.Geometries.Polygon; -using SMMultiPoint = SharpMap.Geometries.MultiPoint; -using SMMultiLineString = SharpMap.Geometries.MultiLineString; -using SMMultiPolygon = SharpMap.Geometries.MultiPolygon; -using SMGeometryCollection = SharpMap.Geometries.GeometryCollection; - - -namespace SharpMap.Converters.SqlServer2008SpatialObjects -{ - public static class SqlGeometryConverter - { - public static SqlGeometry ToSqlServerGeometry(SMGeometry smGeometry) - { - SqlGeometryBuilder builder = new SqlGeometryBuilder(); - SharpMapGeometryToSqlGeometry(builder, smGeometry); - return builder.ConstructedGeometry; - } - - private static void SharpMapGeometryToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometry smGeometry) - { - - switch (smGeometry.GeometryType) - { - case SMGeometryType.Point: - SharpMapPointToSqlGeometry(geomBuilder, smGeometry as SMPoint); - break; - case SMGeometryType.LineString: - SharpMapLineStringToSqlGeometry(geomBuilder, smGeometry as SMLineString); - break; - case SMGeometryType.Polygon: - SharpMapPolygonToSqlGeometry(geomBuilder, smGeometry as SMPolygon); - break; - case SMGeometryType.MultiPoint: - SharpMapMultiPointToSqlGeometry(geomBuilder, smGeometry as SMMultiPoint); - break; - case SMGeometryType.MultiLineString: - SharpMapMultiLineStringToSqlGeometry(geomBuilder, smGeometry as SMMultiLineString); - break; - case SMGeometryType.MultiPolygon: - SharpMapMultiPolygonToSqlGeometry(geomBuilder, smGeometry as SMMultiPolygon); - break; - case SMGeometryType.GeometryCollection: - SharpMapGeometryCollectionToSqlGeometry(geomBuilder, smGeometry as SMGeometryCollection); - break; - default: - throw new ArgumentException( - String.Format("Cannot convert '{0}' geometry type", smGeometry.GeometryType), "smGeometry"); - } - } - - private static void SharpMapGeometryCollectionToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometryCollection geometryCollection) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.GeometryCollection); - for (int i = 0; i < geometryCollection.NumGeometries; i++ ) - SharpMapGeometryToSqlGeometry(geomBuilder, geometryCollection.Geometry(i)); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPolygon multiPolygon) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPolygon); - for (int i = 0; i < multiPolygon.NumGeometries; i++) - SharpMapPolygonToSqlGeometry(geomBuilder, multiPolygon.Geometry(i) as SMPolygon); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiLineString multiLineString) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiLineString); - for (int i = 0; i < multiLineString.NumGeometries; i++) - SharpMapLineStringToSqlGeometry(geomBuilder, multiLineString.Geometry(i) as SMLineString); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPoint multiPoint) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPoint); - for(int i = 0; i <= multiPoint.NumGeometries; i++) - SharpMapPointToSqlGeometry(geomBuilder, multiPoint.Geometry(i)); - geomBuilder.EndGeometry(); - } - - private static void SharpMapPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPoint point) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.Point); - geomBuilder.BeginFigure(point.X, point.Y); - geomBuilder.EndFigure(); - geomBuilder.EndGeometry(); - } - - private static void SharpMapLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMLineString lineString) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.LineString); - SMPoint point = lineString.StartPoint; - geomBuilder.BeginFigure(point.X, point.Y); - for (int i = 1; i < lineString.NumPoints; i++) - { - point = lineString.Point(i); - geomBuilder.AddLine(point.X, point.Y); - } - geomBuilder.EndFigure(); - geomBuilder.EndGeometry(); - } - - private static void SharpMapPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPolygon polygon) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.Polygon); - AddRing(geomBuilder, polygon.ExteriorRing); - for (int i = 0; i < polygon.NumInteriorRing; i++) - AddRing(geomBuilder, polygon.InteriorRing(i)); - geomBuilder.EndGeometry(); - } - - private static void AddRing(SqlGeometryBuilder builder, SMLinearRing linearRing) - { - SMPoint pt = linearRing.StartPoint; - builder.BeginFigure(pt.X, pt.Y); - for (int i = 1; i < linearRing.NumPoints; i++) - { - pt = linearRing.Point(i); - builder.AddLine(pt.X, pt.Y); - } - builder.EndFigure(); - } - - public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry) - { - OpenGisGeometryType geometryType = - (OpenGisGeometryType) Enum.Parse(typeof (OpenGisGeometryType), (string) geometry.STGeometryType()); - switch (geometryType) - { - case OpenGisGeometryType.Point: - return SqlGeometryToSharpMapPoint(geometry); - case OpenGisGeometryType.LineString: - return SqlGeometryToSharpMapLineString(geometry); - case OpenGisGeometryType.Polygon: - return SqlGeometryToSharpMapPolygon(geometry); - case OpenGisGeometryType.MultiPoint: - return SqlGeometryToSharpMapMultiPoint(geometry); - case OpenGisGeometryType.MultiLineString: - return SqlGeometryToSharpMapMultiLineString(geometry); - case OpenGisGeometryType.MultiPolygon: - return SqlGeometryToSharpMapMultiPolygon(geometry); - case OpenGisGeometryType.GeometryCollection: - return SqlGeometryToSharpMapGeometryCollection(geometry); - } - throw new ArgumentException(string.Format("Cannot convert SqlServer '{0}' to Sharpmap.Geometry", geometry.STGeometryType()), "geometry"); - } - - private static SMGeometryCollection SqlGeometryToSharpMapGeometryCollection(SqlGeometry geometry) - { - SMGeometryCollection geometryCollection = new SMGeometryCollection(); - for(int i = 0; i < geometry.STNumGeometries(); i++) - geometryCollection.Collection.Add(ToSharpMapGeometry(geometry.STGeometryN(i))); - return geometryCollection; - } - - private static SMMultiPolygon SqlGeometryToSharpMapMultiPolygon(SqlGeometry geometry) - { - SMMultiPolygon multiPolygon = new SMMultiPolygon(); - for(int i = 0; i < geometry.STNumGeometries(); i++) - multiPolygon.Polygons.Add((SMPolygon)SqlGeometryToSharpMapPolygon(geometry.STGeometryN(i))); - return multiPolygon; - } - - private static SMMultiLineString SqlGeometryToSharpMapMultiLineString(SqlGeometry geometry) - { - SMMultiLineString multiLineString = new SMMultiLineString(); - for (int i = 0; i < geometry.STNumGeometries(); i++) - multiLineString.LineStrings.Add((SMLineString)SqlGeometryToSharpMapLineString(geometry.STGeometryN(i))); - return multiLineString; - } - - private static SMGeometry SqlGeometryToSharpMapMultiPoint(SqlGeometry geometry) - { - SMMultiPoint multiPoint = new SMMultiPoint(); - for (int i = 0; i < geometry.STNumGeometries(); i++) - multiPoint.Points.Add((SMPoint)SqlGeometryToSharpMapPoint(geometry.STGeometryN(i))); - return multiPoint; - } - - private static SMGeometry SqlGeometryToSharpMapPoint(SqlGeometry geometry) - { - return new SMPoint((double)geometry.STX, (double)geometry.STY); - } - - private static IEnumerable GetPointsEnumerable(SqlGeometry geometry) - { - foreach (SMPoint point in GetPoints(geometry)) - yield return point; - } - - private static IList GetPoints(SqlGeometry geometry) - { - SMPoint[] pts = new SMPoint[(int)geometry.STNumPoints()]; - for (int i = 0; i < (int)geometry.STNumPoints(); i++) - { - SqlGeometry ptGeometry = geometry.STPointN(i); - pts[i] = new SMPoint((double)ptGeometry.STX, (double)ptGeometry.STY); - } - return pts; - - } - - private static SMGeometry SqlGeometryToSharpMapLineString(SqlGeometry geometry) - { - return new SMLineString(GetPoints(geometry)); - } - - private static SMGeometry SqlGeometryToSharpMapPolygon(SqlGeometry geometry) - { - //exterior ring - SMLinearRing exterior = new SMLinearRing(GetPoints(geometry.STExteriorRing())); - SMLinearRing[] interior = null; - if (geometry.STNumInteriorRing()>0) - { - interior = new SMLinearRing[(int)geometry.STNumInteriorRing()]; - for (int i = 0; i < geometry.STNumInteriorRing(); i++) - interior[i] = new SMLinearRing(GetPoints(geometry.STInteriorRingN(i))); - } - return new SMPolygon(exterior, interior); - } - } -} \ No newline at end of file diff --git a/SharpMap/Converters/WellKnownText/SpatialReference.cs b/SharpMap/Converters/WellKnownText/SpatialReference.cs index f40f9f00..b2a0642f 100644 --- a/SharpMap/Converters/WellKnownText/SpatialReference.cs +++ b/SharpMap/Converters/WellKnownText/SpatialReference.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Net; using System.Reflection; using System.Xml; @@ -69,25 +70,24 @@ public static string SridToProj4(int srid) /// public static IEnumerable> GetAllReferenceSystems() { - var xmldoc = new XmlDocument(); - - var uri = new Uri(Assembly.GetExecutingAssembly().CodeBase); - var file = Path.GetDirectoryName(uri.LocalPath) + "\\SpatialRefSys.xml"; + XmlNodeList nodes = null; try { - xmldoc.Load(file); + var xml = EnsureSpatialRefSysXml(); + nodes = xml.DocumentElement.SelectNodes("/SpatialReference/*"); } - catch + catch (Exception e) { - yield break; + nodes = null; } - var nodes = xmldoc.DocumentElement.SelectNodes("/SpatialReference/*"); + if (nodes == null) + yield break; + foreach (XmlNode referenceNode in nodes) { - var srid = int.Parse(referenceNode.SelectSingleNode("SRID").InnerText); - - var wkt = referenceNode.LastChild.InnerText; + int srid = int.Parse(referenceNode.SelectSingleNode("SRID").InnerText); + string wkt = referenceNode.LastChild.InnerText; yield return new KeyValuePair(srid, wkt); } @@ -95,14 +95,9 @@ public static IEnumerable> GetAllReferenceSystems() private static string SridToDefinition(int srid, IDictionary cache, string nodeName = null) { - - var xmldoc = new XmlDocument(); - - var uri = new Uri(Assembly.GetExecutingAssembly().CodeBase); - var file = Path.GetDirectoryName(uri.LocalPath) + "\\SpatialRefSys.xml"; try { - xmldoc.Load(file); + var xmldoc = EnsureSpatialRefSysXml(); var node = xmldoc.DocumentElement.SelectSingleNode("/SpatialReference/ReferenceSystem[SRID='" + srid + "']"); if (node != null) { @@ -121,5 +116,28 @@ private static string SridToDefinition(int srid, IDictionary cache, } return ""; } + + private static XmlDocument EnsureSpatialRefSysXml() + { + var res = new XmlDocument(); + + var uri = new Uri(Assembly.GetExecutingAssembly().CodeBase); + string file = Path.Combine(Path.GetDirectoryName(uri.LocalPath), "SpatialRefSys.xml"); + + if (!File.Exists(file)) + DownloadSrs(file); + + res.Load(file); + return res; + } + + private static void DownloadSrs(string path) + { + using (var wc = new WebClient()) + wc.DownloadFile( + new Uri("https://raw.githubusercontent.com/SharpMap/SharpMap/Branches/1.0/SharpMap/SpatialRefSys.xml"), + path); + + } } -} \ No newline at end of file +} diff --git a/SharpMap/Data/Providers/MsSql.cs b/SharpMap/Data/Providers/MsSql.cs index 45c66435..acbaf1c4 100644 --- a/SharpMap/Data/Providers/MsSql.cs +++ b/SharpMap/Data/Providers/MsSql.cs @@ -660,4 +660,4 @@ private static SqlDbType Type2SqlType(Type t) } } } -} \ No newline at end of file +} diff --git a/SharpMap/Data/Providers/MsSqlSpatial.cs b/SharpMap/Data/Providers/MsSqlSpatial.cs index 6d26faef..81aba707 100644 --- a/SharpMap/Data/Providers/MsSqlSpatial.cs +++ b/SharpMap/Data/Providers/MsSqlSpatial.cs @@ -24,7 +24,6 @@ using System.Data; using System.Data.Common; using System.Data.SqlClient; -using NetTopologySuite.IO; using SharpMap.Converters.WellKnownBinary; using GeoAPI.Geometries; @@ -667,4 +666,4 @@ protected override string GetSpatialWhere(IGeometry bbox, DbCommand command) Table, GeometryColumn, BuildGeometry(bbox, sqlCommand), DbUtility.DecorateColumn(ObjectIdColumn)); } } -} \ No newline at end of file +} diff --git a/SharpMap/Data/Providers/OleDbPoint.cs b/SharpMap/Data/Providers/OleDbPoint.cs index 9bf79a69..eba8d951 100644 --- a/SharpMap/Data/Providers/OleDbPoint.cs +++ b/SharpMap/Data/Providers/OleDbPoint.cs @@ -1,3 +1,4 @@ +#if !NETSTANDARD // Copyright 2006 - Morten Nielsen (www.iter.dk) // // This file is part of SharpMap. @@ -401,4 +402,5 @@ public override Envelope GetExtents() #endregion } -} \ No newline at end of file +} +#endif diff --git a/SharpMap/Data/Providers/OleDbTwoPointLine.cs b/SharpMap/Data/Providers/OleDbTwoPointLine.cs index 3fe14089..229c747a 100644 --- a/SharpMap/Data/Providers/OleDbTwoPointLine.cs +++ b/SharpMap/Data/Providers/OleDbTwoPointLine.cs @@ -1,4 +1,5 @@ -// Copyright 2013 - Lothar Otto (www.sodako.de) +#if !NETSTANDARD +// Copyright 2013 - Lothar Otto (www.sodako.de) // // This file is part of SharpMap. // SharpMap is free software; you can redistribute it and/or modify @@ -450,4 +451,5 @@ public override Envelope GetExtents() #endregion } -} \ No newline at end of file +} +#endif diff --git a/SharpMap/Drawing/Color.cs b/SharpMap/Drawing/Color.cs new file mode 100644 index 00000000..b3da6eaf --- /dev/null +++ b/SharpMap/Drawing/Color.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Reflection; + +#if NETSTANDARD2_0 +namespace SharpMap.Drawing +{ + public struct Color + { + private static readonly Dictionary KnownColorLookup; + + static Color() + { + KnownColorLookup = new Dictionary(); + foreach (KnownColor knownColor in System.Enum.GetValues(typeof(KnownColor))) + { + var argb = (ArgbValueAttribute) typeof(KnownColor).GetCustomAttribute(typeof(ArgbValueAttribute)); + KnownColorLookup.Add(knownColor, argb.Argb); + + } + } + + internal static System.Drawing.Color FromKnownColor(KnownColor knownColor) + { + return System.Drawing.Color.FromArgb(KnownColorLookup[knownColor]); + } + } +} +#endif diff --git a/SharpMap/Drawing/KnownColor.cs b/SharpMap/Drawing/KnownColor.cs new file mode 100644 index 00000000..1e77de0c --- /dev/null +++ b/SharpMap/Drawing/KnownColor.cs @@ -0,0 +1,904 @@ + +#if NETSTANDARD2_0 + +namespace SharpMap.Drawing +{ + + /// + /// Attribute class to associate ARGB value with + [System.AttributeUsage(System.AttributeTargets.Field)] + internal class ArgbValueAttribute : System.Attribute + { + /// + /// Creates an instance of this class + /// + /// The ARGB value + public ArgbValueAttribute(int argb) + { + Argb = argb; + } + + /// + /// Gets a value indicating the ARGB value + /// + public int Argb { get; } + } + + /// + /// Straight copy of names + /// + internal enum KnownColor + { + /// + /// Color ActiveBorder (#B4B4B4) + /// + [ArgbValue(-4934476)] ActiveBorder = 1, + + /// + /// Color ActiveCaption (#99B4D1) + /// + [ArgbValue(-6703919)] ActiveCaption = 2, + + /// + /// Color ActiveCaptionText (#0) + /// + [ArgbValue(-16777216)] ActiveCaptionText = 3, + + /// + /// Color AppWorkspace (#ABABAB) + /// + [ArgbValue(-5526613)] AppWorkspace = 4, + + /// + /// Color Control (#F0F0F0) + /// + [ArgbValue(-986896)] Control = 5, + + /// + /// Color ControlDark (#A0A0A0) + /// + [ArgbValue(-6250336)] ControlDark = 6, + + /// + /// Color ControlDarkDark (#696969) + /// + [ArgbValue(-9868951)] ControlDarkDark = 7, + + /// + /// Color ControlLight (#E3E3E3) + /// + [ArgbValue(-1842205)] ControlLight = 8, + + /// + /// Color ControlLightLight (#FFFFFF) + /// + [ArgbValue(-1)] ControlLightLight = 9, + + /// + /// Color ControlText (#0) + /// + [ArgbValue(-16777216)] ControlText = 10, + + /// + /// Color Desktop (#0) + /// + [ArgbValue(-16777216)] Desktop = 11, + + /// + /// Color GrayText (#6D6D6D) + /// + [ArgbValue(-9605779)] GrayText = 12, + + /// + /// Color Highlight (#78D7) + /// + [ArgbValue(-16746281)] Highlight = 13, + + /// + /// Color HighlightText (#FFFFFF) + /// + [ArgbValue(-1)] HighlightText = 14, + + /// + /// Color HotTrack (#66CC) + /// + [ArgbValue(-16750900)] HotTrack = 15, + + /// + /// Color InactiveBorder (#F4F7FC) + /// + [ArgbValue(-722948)] InactiveBorder = 16, + + /// + /// Color InactiveCaption (#BFCDDB) + /// + [ArgbValue(-4207141)] InactiveCaption = 17, + + /// + /// Color InactiveCaptionText (#0) + /// + [ArgbValue(-16777216)] InactiveCaptionText = 18, + + /// + /// Color Info (#FFFFE1) + /// + [ArgbValue(-31)] Info = 19, + + /// + /// Color InfoText (#0) + /// + [ArgbValue(-16777216)] InfoText = 20, + + /// + /// Color Menu (#F0F0F0) + /// + [ArgbValue(-986896)] Menu = 21, + + /// + /// Color MenuText (#0) + /// + [ArgbValue(-16777216)] MenuText = 22, + + /// + /// Color ScrollBar (#C8C8C8) + /// + [ArgbValue(-3618616)] ScrollBar = 23, + + /// + /// Color Window (#FFFFFF) + /// + [ArgbValue(-1)] Window = 24, + + /// + /// Color WindowFrame (#646464) + /// + [ArgbValue(-10197916)] WindowFrame = 25, + + /// + /// Color WindowText (#0) + /// + [ArgbValue(-16777216)] WindowText = 26, + + /// + /// Color Transparent (#FFFFFF) + /// + [ArgbValue(16777215)] Transparent = 27, + + /// + /// Color AliceBlue (#F0F8FF) + /// + [ArgbValue(-984833)] AliceBlue = 28, + + /// + /// Color AntiqueWhite (#FAEBD7) + /// + [ArgbValue(-332841)] AntiqueWhite = 29, + + /// + /// Color Aqua (#FFFF) + /// + [ArgbValue(-16711681)] Aqua = 30, + + /// + /// Color Aquamarine (#7FFFD4) + /// + [ArgbValue(-8388652)] Aquamarine = 31, + + /// + /// Color Azure (#F0FFFF) + /// + [ArgbValue(-983041)] Azure = 32, + + /// + /// Color Beige (#F5F5DC) + /// + [ArgbValue(-657956)] Beige = 33, + + /// + /// Color Bisque (#FFE4C4) + /// + [ArgbValue(-6972)] Bisque = 34, + + /// + /// Color Black (#0) + /// + [ArgbValue(-16777216)] Black = 35, + + /// + /// Color BlanchedAlmond (#FFEBCD) + /// + [ArgbValue(-5171)] BlanchedAlmond = 36, + + /// + /// Color Blue (#FF) + /// + [ArgbValue(-16776961)] Blue = 37, + + /// + /// Color BlueViolet (#8A2BE2) + /// + [ArgbValue(-7722014)] BlueViolet = 38, + + /// + /// Color Brown (#A52A2A) + /// + [ArgbValue(-5952982)] Brown = 39, + + /// + /// Color BurlyWood (#DEB887) + /// + [ArgbValue(-2180985)] BurlyWood = 40, + + /// + /// Color CadetBlue (#5F9EA0) + /// + [ArgbValue(-10510688)] CadetBlue = 41, + + /// + /// Color Chartreuse (#7FFF00) + /// + [ArgbValue(-8388864)] Chartreuse = 42, + + /// + /// Color Chocolate (#D2691E) + /// + [ArgbValue(-2987746)] Chocolate = 43, + + /// + /// Color Coral (#FF7F50) + /// + [ArgbValue(-32944)] Coral = 44, + + /// + /// Color CornflowerBlue (#6495ED) + /// + [ArgbValue(-10185235)] CornflowerBlue = 45, + + /// + /// Color Cornsilk (#FFF8DC) + /// + [ArgbValue(-1828)] Cornsilk = 46, + + /// + /// Color Crimson (#DC143C) + /// + [ArgbValue(-2354116)] Crimson = 47, + + /// + /// Color Cyan (#FFFF) + /// + [ArgbValue(-16711681)] Cyan = 48, + + /// + /// Color DarkBlue (#8B) + /// + [ArgbValue(-16777077)] DarkBlue = 49, + + /// + /// Color DarkCyan (#8B8B) + /// + [ArgbValue(-16741493)] DarkCyan = 50, + + /// + /// Color DarkGoldenrod (#B8860B) + /// + [ArgbValue(-4684277)] DarkGoldenrod = 51, + + /// + /// Color DarkGray (#A9A9A9) + /// + [ArgbValue(-5658199)] DarkGray = 52, + + /// + /// Color DarkGreen (#6400) + /// + [ArgbValue(-16751616)] DarkGreen = 53, + + /// + /// Color DarkKhaki (#BDB76B) + /// + [ArgbValue(-4343957)] DarkKhaki = 54, + + /// + /// Color DarkMagenta (#8B008B) + /// + [ArgbValue(-7667573)] DarkMagenta = 55, + + /// + /// Color DarkOliveGreen (#556B2F) + /// + [ArgbValue(-11179217)] DarkOliveGreen = 56, + + /// + /// Color DarkOrange (#FF8C00) + /// + [ArgbValue(-29696)] DarkOrange = 57, + + /// + /// Color DarkOrchid (#9932CC) + /// + [ArgbValue(-6737204)] DarkOrchid = 58, + + /// + /// Color DarkRed (#8B0000) + /// + [ArgbValue(-7667712)] DarkRed = 59, + + /// + /// Color DarkSalmon (#E9967A) + /// + [ArgbValue(-1468806)] DarkSalmon = 60, + + /// + /// Color DarkSeaGreen (#8FBC8B) + /// + [ArgbValue(-7357301)] DarkSeaGreen = 61, + + /// + /// Color DarkSlateBlue (#483D8B) + /// + [ArgbValue(-12042869)] DarkSlateBlue = 62, + + /// + /// Color DarkSlateGray (#2F4F4F) + /// + [ArgbValue(-13676721)] DarkSlateGray = 63, + + /// + /// Color DarkTurquoise (#CED1) + /// + [ArgbValue(-16724271)] DarkTurquoise = 64, + + /// + /// Color DarkViolet (#9400D3) + /// + [ArgbValue(-7077677)] DarkViolet = 65, + + /// + /// Color DeepPink (#FF1493) + /// + [ArgbValue(-60269)] DeepPink = 66, + + /// + /// Color DeepSkyBlue (#BFFF) + /// + [ArgbValue(-16728065)] DeepSkyBlue = 67, + + /// + /// Color DimGray (#696969) + /// + [ArgbValue(-9868951)] DimGray = 68, + + /// + /// Color DodgerBlue (#1E90FF) + /// + [ArgbValue(-14774017)] DodgerBlue = 69, + + /// + /// Color Firebrick (#B22222) + /// + [ArgbValue(-5103070)] Firebrick = 70, + + /// + /// Color FloralWhite (#FFFAF0) + /// + [ArgbValue(-1296)] FloralWhite = 71, + + /// + /// Color ForestGreen (#228B22) + /// + [ArgbValue(-14513374)] ForestGreen = 72, + + /// + /// Color Fuchsia (#FF00FF) + /// + [ArgbValue(-65281)] Fuchsia = 73, + + /// + /// Color Gainsboro (#DCDCDC) + /// + [ArgbValue(-2302756)] Gainsboro = 74, + + /// + /// Color GhostWhite (#F8F8FF) + /// + [ArgbValue(-460545)] GhostWhite = 75, + + /// + /// Color Gold (#FFD700) + /// + [ArgbValue(-10496)] Gold = 76, + + /// + /// Color Goldenrod (#DAA520) + /// + [ArgbValue(-2448096)] Goldenrod = 77, + + /// + /// Color Gray (#808080) + /// + [ArgbValue(-8355712)] Gray = 78, + + /// + /// Color Green (#8000) + /// + [ArgbValue(-16744448)] Green = 79, + + /// + /// Color GreenYellow (#ADFF2F) + /// + [ArgbValue(-5374161)] GreenYellow = 80, + + /// + /// Color Honeydew (#F0FFF0) + /// + [ArgbValue(-983056)] Honeydew = 81, + + /// + /// Color HotPink (#FF69B4) + /// + [ArgbValue(-38476)] HotPink = 82, + + /// + /// Color IndianRed (#CD5C5C) + /// + [ArgbValue(-3318692)] IndianRed = 83, + + /// + /// Color Indigo (#4B0082) + /// + [ArgbValue(-11861886)] Indigo = 84, + + /// + /// Color Ivory (#FFFFF0) + /// + [ArgbValue(-16)] Ivory = 85, + + /// + /// Color Khaki (#F0E68C) + /// + [ArgbValue(-989556)] Khaki = 86, + + /// + /// Color Lavender (#E6E6FA) + /// + [ArgbValue(-1644806)] Lavender = 87, + + /// + /// Color LavenderBlush (#FFF0F5) + /// + [ArgbValue(-3851)] LavenderBlush = 88, + + /// + /// Color LawnGreen (#7CFC00) + /// + [ArgbValue(-8586240)] LawnGreen = 89, + + /// + /// Color LemonChiffon (#FFFACD) + /// + [ArgbValue(-1331)] LemonChiffon = 90, + + /// + /// Color LightBlue (#ADD8E6) + /// + [ArgbValue(-5383962)] LightBlue = 91, + + /// + /// Color LightCoral (#F08080) + /// + [ArgbValue(-1015680)] LightCoral = 92, + + /// + /// Color LightCyan (#E0FFFF) + /// + [ArgbValue(-2031617)] LightCyan = 93, + + /// + /// Color LightGoldenrodYellow (#FAFAD2) + /// + [ArgbValue(-329006)] LightGoldenrodYellow = 94, + + /// + /// Color LightGray (#D3D3D3) + /// + [ArgbValue(-2894893)] LightGray = 95, + + /// + /// Color LightGreen (#90EE90) + /// + [ArgbValue(-7278960)] LightGreen = 96, + + /// + /// Color LightPink (#FFB6C1) + /// + [ArgbValue(-18751)] LightPink = 97, + + /// + /// Color LightSalmon (#FFA07A) + /// + [ArgbValue(-24454)] LightSalmon = 98, + + /// + /// Color LightSeaGreen (#20B2AA) + /// + [ArgbValue(-14634326)] LightSeaGreen = 99, + + /// + /// Color LightSkyBlue (#87CEFA) + /// + [ArgbValue(-7876870)] LightSkyBlue = 100, + + /// + /// Color LightSlateGray (#778899) + /// + [ArgbValue(-8943463)] LightSlateGray = 101, + + /// + /// Color LightSteelBlue (#B0C4DE) + /// + [ArgbValue(-5192482)] LightSteelBlue = 102, + + /// + /// Color LightYellow (#FFFFE0) + /// + [ArgbValue(-32)] LightYellow = 103, + + /// + /// Color Lime (#FF00) + /// + [ArgbValue(-16711936)] Lime = 104, + + /// + /// Color LimeGreen (#32CD32) + /// + [ArgbValue(-13447886)] LimeGreen = 105, + + /// + /// Color Linen (#FAF0E6) + /// + [ArgbValue(-331546)] Linen = 106, + + /// + /// Color Magenta (#FF00FF) + /// + [ArgbValue(-65281)] Magenta = 107, + + /// + /// Color Maroon (#800000) + /// + [ArgbValue(-8388608)] Maroon = 108, + + /// + /// Color MediumAquamarine (#66CDAA) + /// + [ArgbValue(-10039894)] MediumAquamarine = 109, + + /// + /// Color MediumBlue (#CD) + /// + [ArgbValue(-16777011)] MediumBlue = 110, + + /// + /// Color MediumOrchid (#BA55D3) + /// + [ArgbValue(-4565549)] MediumOrchid = 111, + + /// + /// Color MediumPurple (#9370DB) + /// + [ArgbValue(-7114533)] MediumPurple = 112, + + /// + /// Color MediumSeaGreen (#3CB371) + /// + [ArgbValue(-12799119)] MediumSeaGreen = 113, + + /// + /// Color MediumSlateBlue (#7B68EE) + /// + [ArgbValue(-8689426)] MediumSlateBlue = 114, + + /// + /// Color MediumSpringGreen (#FA9A) + /// + [ArgbValue(-16713062)] MediumSpringGreen = 115, + + /// + /// Color MediumTurquoise (#48D1CC) + /// + [ArgbValue(-12004916)] MediumTurquoise = 116, + + /// + /// Color MediumVioletRed (#C71585) + /// + [ArgbValue(-3730043)] MediumVioletRed = 117, + + /// + /// Color MidnightBlue (#191970) + /// + [ArgbValue(-15132304)] MidnightBlue = 118, + + /// + /// Color MintCream (#F5FFFA) + /// + [ArgbValue(-655366)] MintCream = 119, + + /// + /// Color MistyRose (#FFE4E1) + /// + [ArgbValue(-6943)] MistyRose = 120, + + /// + /// Color Moccasin (#FFE4B5) + /// + [ArgbValue(-6987)] Moccasin = 121, + + /// + /// Color NavajoWhite (#FFDEAD) + /// + [ArgbValue(-8531)] NavajoWhite = 122, + + /// + /// Color Navy (#80) + /// + [ArgbValue(-16777088)] Navy = 123, + + /// + /// Color OldLace (#FDF5E6) + /// + [ArgbValue(-133658)] OldLace = 124, + + /// + /// Color Olive (#808000) + /// + [ArgbValue(-8355840)] Olive = 125, + + /// + /// Color OliveDrab (#6B8E23) + /// + [ArgbValue(-9728477)] OliveDrab = 126, + + /// + /// Color Orange (#FFA500) + /// + [ArgbValue(-23296)] Orange = 127, + + /// + /// Color OrangeRed (#FF4500) + /// + [ArgbValue(-47872)] OrangeRed = 128, + + /// + /// Color Orchid (#DA70D6) + /// + [ArgbValue(-2461482)] Orchid = 129, + + /// + /// Color PaleGoldenrod (#EEE8AA) + /// + [ArgbValue(-1120086)] PaleGoldenrod = 130, + + /// + /// Color PaleGreen (#98FB98) + /// + [ArgbValue(-6751336)] PaleGreen = 131, + + /// + /// Color PaleTurquoise (#AFEEEE) + /// + [ArgbValue(-5247250)] PaleTurquoise = 132, + + /// + /// Color PaleVioletRed (#DB7093) + /// + [ArgbValue(-2396013)] PaleVioletRed = 133, + + /// + /// Color PapayaWhip (#FFEFD5) + /// + [ArgbValue(-4139)] PapayaWhip = 134, + + /// + /// Color PeachPuff (#FFDAB9) + /// + [ArgbValue(-9543)] PeachPuff = 135, + + /// + /// Color Peru (#CD853F) + /// + [ArgbValue(-3308225)] Peru = 136, + + /// + /// Color Pink (#FFC0CB) + /// + [ArgbValue(-16181)] Pink = 137, + + /// + /// Color Plum (#DDA0DD) + /// + [ArgbValue(-2252579)] Plum = 138, + + /// + /// Color PowderBlue (#B0E0E6) + /// + [ArgbValue(-5185306)] PowderBlue = 139, + + /// + /// Color Purple (#800080) + /// + [ArgbValue(-8388480)] Purple = 140, + + /// + /// Color Red (#FF0000) + /// + [ArgbValue(-65536)] Red = 141, + + /// + /// Color RosyBrown (#BC8F8F) + /// + [ArgbValue(-4419697)] RosyBrown = 142, + + /// + /// Color RoyalBlue (#4169E1) + /// + [ArgbValue(-12490271)] RoyalBlue = 143, + + /// + /// Color SaddleBrown (#8B4513) + /// + [ArgbValue(-7650029)] SaddleBrown = 144, + + /// + /// Color Salmon (#FA8072) + /// + [ArgbValue(-360334)] Salmon = 145, + + /// + /// Color SandyBrown (#F4A460) + /// + [ArgbValue(-744352)] SandyBrown = 146, + + /// + /// Color SeaGreen (#2E8B57) + /// + [ArgbValue(-13726889)] SeaGreen = 147, + + /// + /// Color SeaShell (#FFF5EE) + /// + [ArgbValue(-2578)] SeaShell = 148, + + /// + /// Color Sienna (#A0522D) + /// + [ArgbValue(-6270419)] Sienna = 149, + + /// + /// Color Silver (#C0C0C0) + /// + [ArgbValue(-4144960)] Silver = 150, + + /// + /// Color SkyBlue (#87CEEB) + /// + [ArgbValue(-7876885)] SkyBlue = 151, + + /// + /// Color SlateBlue (#6A5ACD) + /// + [ArgbValue(-9807155)] SlateBlue = 152, + + /// + /// Color SlateGray (#708090) + /// + [ArgbValue(-9404272)] SlateGray = 153, + + /// + /// Color Snow (#FFFAFA) + /// + [ArgbValue(-1286)] Snow = 154, + + /// + /// Color SpringGreen (#FF7F) + /// + [ArgbValue(-16711809)] SpringGreen = 155, + + /// + /// Color SteelBlue (#4682B4) + /// + [ArgbValue(-12156236)] SteelBlue = 156, + + /// + /// Color Tan (#D2B48C) + /// + [ArgbValue(-2968436)] Tan = 157, + + /// + /// Color Teal (#8080) + /// + [ArgbValue(-16744320)] Teal = 158, + + /// + /// Color Thistle (#D8BFD8) + /// + [ArgbValue(-2572328)] Thistle = 159, + + /// + /// Color Tomato (#FF6347) + /// + [ArgbValue(-40121)] Tomato = 160, + + /// + /// Color Turquoise (#40E0D0) + /// + [ArgbValue(-12525360)] Turquoise = 161, + + /// + /// Color Violet (#EE82EE) + /// + [ArgbValue(-1146130)] Violet = 162, + + /// + /// Color Wheat (#F5DEB3) + /// + [ArgbValue(-663885)] Wheat = 163, + + /// + /// Color White (#FFFFFF) + /// + [ArgbValue(-1)] White = 164, + + /// + /// Color WhiteSmoke (#F5F5F5) + /// + [ArgbValue(-657931)] WhiteSmoke = 165, + + /// + /// Color Yellow (#FFFF00) + /// + [ArgbValue(-256)] Yellow = 166, + + /// + /// Color YellowGreen (#9ACD32) + /// + [ArgbValue(-6632142)] YellowGreen = 167, + + /// + /// Color ButtonFace (#F0F0F0) + /// + [ArgbValue(-986896)] ButtonFace = 168, + + /// + /// Color ButtonHighlight (#FFFFFF) + /// + [ArgbValue(-1)] ButtonHighlight = 169, + + /// + /// Color ButtonShadow (#A0A0A0) + /// + [ArgbValue(-6250336)] ButtonShadow = 170, + + /// + /// Color GradientActiveCaption (#B9D1EA) + /// + [ArgbValue(-4599318)] GradientActiveCaption = 171, + + /// + /// Color GradientInactiveCaption (#D7E4F2) + /// + [ArgbValue(-2628366)] GradientInactiveCaption = 172, + + /// + /// Color MenuBar (#F0F0F0) + /// + [ArgbValue(-986896)] MenuBar = 173, + + /// + /// Color MenuHighlight (#3399FF) + /// + [ArgbValue(-13395457)] MenuHighlight = 174, + } +} +#endif diff --git a/SharpMap/Geometries/BoundingBox.cs b/SharpMap/Geometries/BoundingBox.cs deleted file mode 100644 index a666b9a8..00000000 --- a/SharpMap/Geometries/BoundingBox.cs +++ /dev/null @@ -1,664 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Concurrent; -using System.Collections.ObjectModel; -using System.IO; - -namespace SharpMap.Geometries -{ - /// - /// Bounding box type with double precision - /// - /// - /// The Bounding Box represents a box whose sides are parallel to the two axes of the coordinate system. - /// - [Serializable] - public class BoundingBox : IEquatable - { - private Point _max; - private Point _min; - - /// - /// Initializes a bounding box - /// - /// - /// In case min values are larger than max values, the parameters will be swapped to ensure correct min/max boundary - /// - /// left - /// bottom - /// right - /// top - public BoundingBox(double minX, double minY, double maxX, double maxY) - { - _min = new Point(minX, minY); - _max = new Point(maxX, maxY); - CheckMinMax(); - } - - internal BoundingBox(BinaryReader br) - { - var bytes = new byte[32]; - br.Read(bytes, 0, 32); - - var doubles = new double[4]; - Buffer.BlockCopy(bytes, 0, doubles, 0, 32); - - _min = new Point(doubles[0], doubles[1]); - _max = new Point(doubles[2], doubles[3]); - } - - /// - /// Initializes a bounding box - /// - /// Lower left corner - /// Upper right corner - public BoundingBox(Point lowerLeft, Point upperRight) - : this(lowerLeft.X, lowerLeft.Y, upperRight.X, upperRight.Y) - { - } - - /// - /// Initializes a new Bounding Box based on the bounds from a set of geometries - /// - /// list of objects - public BoundingBox(Collection objects) - { - if (objects == null || objects.Count == 0) - { - _min = null; - _max = null; - return; - } - _min = objects[0].GetBoundingBox().Min.Clone(); - _max = objects[0].GetBoundingBox().Max.Clone(); - CheckMinMax(); - for (int i = 1; i < objects.Count; i++) - { - BoundingBox box = objects[i].GetBoundingBox(); - _min.X = Math.Min(box.Min.X, Min.X); - _min.Y = Math.Min(box.Min.Y, Min.Y); - _max.X = Math.Max(box.Max.X, Max.X); - _max.Y = Math.Max(box.Max.Y, Max.Y); - } - } - - /// - /// Initializes a new Bounding Box based on the bounds from a set of bounding boxes - /// - /// list of objects - public BoundingBox(Collection objects) - { - if (objects.Count == 0) - { - _max = null; - _min = null; - } - else - { - _min = objects[0].Min.Clone(); - _max = objects[0].Max.Clone(); - for (int i = 1; i < objects.Count; i++) - { - _min.X = Math.Min(objects[i].Min.X, Min.X); - _min.Y = Math.Min(objects[i].Min.Y, Min.Y); - _max.X = Math.Max(objects[i].Max.X, Max.X); - _max.Y = Math.Max(objects[i].Max.Y, Max.Y); - } - } - } - - /// - /// Gets or sets the lower left corner. - /// - public Point Min - { - get { return _min; } - set - { - _min = value; - _centroid = null; - } - } - - /// - /// Gets or sets the upper right corner. - /// - public Point Max - { - get { return _max; } - set - { - _max = value; - _centroid = null; - } - } - - /// - /// Gets the left boundary - /// - public Double Left - { - get { return _min.X; } - } - - /// - /// Gets the right boundary - /// - public Double Right - { - get { return _max.X; } - } - - /// - /// Gets the top boundary - /// - public Double Top - { - get { return _max.Y; } - } - - /// - /// Gets the bottom boundary - /// - public Double Bottom - { - get { return _min.Y; } - } - - /// - /// The upper left of this bounding box - /// - public Point TopLeft - { - get { return new Point(Left, Top); } - } - - /// - /// The upper right of this bounding box - /// - public Point TopRight - { - get { return new Point(Right, Top); } - } - - /// - /// The lower left of this bounding box - /// - public Point BottomLeft - { - get { return new Point(Left, Bottom); } - } - - /// - /// The lower right of this bounding box - /// - public Point BottomRight - { - get { return new Point(Right, Bottom); } - } - - /// - /// Returns the width of the bounding box - /// - /// Width of boundingbox - public double Width - { - get { return Math.Abs(_max.X - _min.X); } - } - - /// - /// Returns the height of the bounding box - /// - /// Height of boundingbox - public double Height - { - get { return Math.Abs(_max.Y - _min.Y); } - } - - /// - /// Intersection scalar (used for weighting in building the tree) - /// - public uint LongestAxis - { - get - { - Point boxdim = Max - Min; - uint la = 0; // longest axis - double lav = 0; // longest axis length - // for each dimension - for (uint ii = 0; ii < 2; ii++) - { - // check if its longer - if (boxdim[ii] > lav) - { - // store it if it is - la = ii; - lav = boxdim[ii]; - } - } - return la; - } - } - - /// - /// This bounding box only contains valid ordinates - /// - public bool IsValid - { - get - { - return (!_min.IsEmpty() && !_max.IsEmpty() && _min != null && _max != null && !double.IsNaN(_min.X) && !double.IsNaN(_max.X) && - !double.IsNaN(_min.Y) && !double.IsNaN(_max.Y)); - } - //set { throw new NotImplementedException(); } - } - - #region IEquatable Members - - /// - /// Checks whether the values of this instance is equal to the values of another instance. - /// - /// to compare to. - /// True if equal - public bool Equals(BoundingBox other) - { - if (other == null) return false; - return Left == other.Left && Right == other.Right && Top == other.Top && Bottom == other.Bottom; - } - - #endregion - - /// - /// Moves/translates the along the the specified vector - /// - /// Offset vector - public void Offset(Point vector) - { - _min += vector; - _max += vector; - } - - /// - /// Checks whether min values are actually smaller than max values and in that case swaps them. - /// - /// true if the bounding was changed - public bool CheckMinMax() - { - bool wasSwapped = false; - if (!_min.IsEmpty() && !_max.IsEmpty()) - { - if (_min.X > _max.X) - { - double tmp = _min.X; - _min.X = _max.X; - _max.X = tmp; - wasSwapped = true; - } - if (_min.Y > _max.Y) - { - double tmp = _min.Y; - _min.Y = _max.Y; - _max.Y = tmp; - wasSwapped = true; - } - } - return wasSwapped; - } - - /// - /// Determines whether the boundingbox intersects another boundingbox - /// - /// - /// - public bool Intersects(BoundingBox box) - { - return !(box.Min.X > Max.X || - box.Max.X < Min.X || - box.Min.Y > Max.Y || - box.Max.Y < Min.Y); - } - - /// - /// Returns true if this intersects the geometry - /// - /// Geometry - /// True if intersects - public bool Intersects(Geometry g) - { - return Touches(g); - } - - /// - /// Returns true if this instance touches the - /// - /// - /// True it touches - public bool Touches(BoundingBox r) - { - for (uint cIndex = 0; cIndex < 2; cIndex++) - { - if ((Min[cIndex] > r.Min[cIndex] && Min[cIndex] < r.Min[cIndex]) || - (Max[cIndex] > r.Max[cIndex] && Max[cIndex] < r.Max[cIndex])) - return true; - } - return false; - } - - /// - /// Returns true if this touches the geometry - /// - /// Geometry - /// True if touches - public bool Touches(Geometry s) - { - if (s is Point) return Touches(s as Point); - throw new NotImplementedException("Touches: Not implemented on this geometry type"); - } - - /// - /// Returns true if this instance contains the - /// - /// - /// True it contains - public bool Contains(BoundingBox r) - { - for (uint cIndex = 0; cIndex < 2; cIndex++) - if (Min[cIndex] > r.Min[cIndex] || Max[cIndex] < r.Max[cIndex]) return false; - - return true; - } - - /// - /// Returns true if this instance contains the geometry - /// - /// - /// True it contains - public bool Contains(Geometry s) - { - if (s is Point) return Contains(s as Point); - throw new NotImplementedException("Contains: Not implemented on these geometries"); - } - - /// - /// Returns true if this instance touches the - /// - /// Geometry - /// True if touches - public bool Touches(Point p) - { - for (uint cIndex = 0; cIndex < 2; cIndex++) - { - if ((Min[cIndex] > p[cIndex] && Min[cIndex] < p[cIndex]) || - (Max[cIndex] > p[cIndex] && Max[cIndex] < p[cIndex])) - return true; - } - return false; - } - - /// - /// Returns the area of the BoundingBox - /// - /// Area of box - public double GetArea() - { - return Width*Height; - } - - /// - /// Gets the intersecting area between two boundingboxes - /// - /// BoundingBox - /// Area - public double GetIntersectingArea(BoundingBox r) - { - uint cIndex; - for (cIndex = 0; cIndex < 2; cIndex++) - if (Min[cIndex] > r.Max[cIndex] || Max[cIndex] < r.Min[cIndex]) return 0.0; - - double ret = 1.0; - double f1, f2; - - for (cIndex = 0; cIndex < 2; cIndex++) - { - f1 = Math.Max(Min[cIndex], r.Min[cIndex]); - f2 = Math.Min(Max[cIndex], r.Max[cIndex]); - ret *= f2 - f1; - } - return ret; - } - - /// - /// Computes the joined boundingbox of this instance and another boundingbox - /// - /// Boundingbox to join with - /// Boundingbox containing both boundingboxes - public BoundingBox Join(BoundingBox box) - { - if (box == null) - return Clone(); - - return new BoundingBox(Math.Min(Min.X, box.Min.X), Math.Min(Min.Y, box.Min.Y), - Math.Max(Max.X, box.Max.X), Math.Max(Max.Y, box.Max.Y)); - } - - /// - /// Computes the joined boundingbox of two boundingboxes - /// - /// - /// - /// - public static BoundingBox Join(BoundingBox box1, BoundingBox box2) - { - if (box1 == null && box2 == null) - return null; - if (box1 == null) - return box2.Clone(); - - return box1.Join(box2); - } - - /// - /// Computes the joined of an array of boundingboxes. - /// - /// Boxes to join - /// Combined BoundingBox - public static BoundingBox Join(BoundingBox[] boxes) - { - if (boxes == null) return null; - if (boxes.Length == 1) return boxes[0]; - BoundingBox box = boxes[0].Clone(); - for (int i = 1; i < boxes.Length; i++) - box = box.Join(boxes[i]); - return box; - } - - /// - /// Increases the size of the boundingbox by the givent amount in all directions - /// - /// Amount to grow in all directions - public BoundingBox Grow(double amount) - { - BoundingBox box = Clone(); - box.Min.X -= amount; - box.Min.Y -= amount; - box.Max.X += amount; - box.Max.Y += amount; - box.CheckMinMax(); - return box; - } - - /// - /// Increases the size of the boundingbox by the givent amount in horizontal and vertical directions - /// - /// Amount to grow in horizontal direction - /// Amount to grow in vertical direction - public BoundingBox Grow(double amountInX, double amountInY) - { - BoundingBox box = Clone(); - box.Min.X -= amountInX; - box.Min.Y -= amountInY; - box.Max.X += amountInX; - box.Max.Y += amountInY; - box.CheckMinMax(); - return box; - } - - /// - /// Checks whether a point lies within the bounding box - /// - /// Point - /// true if point is within - public bool Contains(Point p) - { - if (Max.X < p.X) - return false; - if (Min.X > p.X) - return false; - if (Max.Y < p.Y) - return false; - if (Min.Y > p.Y) - return false; - return true; - } - - /// - /// Computes the minimum distance between this and another . - /// The distance between overlapping bounding boxes is 0. Otherwise, the - /// distance is the Euclidean distance between the closest points. - /// - /// Box to calculate distance to - /// The distance between this and another . - public virtual double Distance(BoundingBox box) - { - double ret = 0.0; - for (uint cIndex = 0; cIndex < 2; cIndex++) - { - double x = 0.0; - - if (box.Max[cIndex] < Min[cIndex]) x = Math.Abs(box.Max[cIndex] - Min[cIndex]); - else if (Max[cIndex] < box.Min[cIndex]) x = Math.Abs(box.Min[cIndex] - Max[cIndex]); - ret += x*x; - } - return Math.Sqrt(ret); - } - - /// - /// Computes the minimum distance between this BoundingBox and a - /// - /// to calculate distance to. - /// Minimum distance. - public virtual double Distance(Point p) - { - double ret = 0.0; - - for (uint cIndex = 0; cIndex < 2; cIndex++) - { - if (p[cIndex] < Min[cIndex]) ret += Math.Pow(Min[cIndex] - p[cIndex], 2.0); - else if (p[cIndex] > Max[cIndex]) ret += Math.Pow(p[cIndex] - Max[cIndex], 2.0); - } - - return Math.Sqrt(ret); - } - - private Point _centroid ; - /// - /// Returns the center of the bounding box - /// - public Point GetCentroid() - { - return (_centroid ?? (_centroid = (_min + _max) * .5f)); - } - - /// - /// Creates a copy of the BoundingBox - /// - /// - public BoundingBox Clone() - { - return new BoundingBox(_min.X, _min.Y, _max.X, _max.Y); - } - - /// - /// Returns a string representation of the boundingbox as LowerLeft + UpperRight formatted as "MinX,MinY MaxX,MaxY" - /// - /// MinX,MinY MaxX,MaxY - public override string ToString() - { - return String.Format(Map.NumberFormatEnUs, "{0},{1} {2},{3}", Min.X, Min.Y, Max.X, Max.Y); - } - - /// - /// Indicates whether the current object is equal to another object of the same type. - /// - /// - /// - public override bool Equals(object obj) - { - var box = obj as BoundingBox; - if (obj == null) - return false; - return Equals(box); - } - - /// - /// Returns a hash code for the specified object - /// - /// A hash code for the specified object - public override int GetHashCode() - { - return Min.GetHashCode() ^ Max.GetHashCode(); - } - - /// - /// Returns the intersection of this bounding box and a default envelope - /// - /// - /// - public BoundingBox Intersection(double[] defaultEnvelope) - { - if (defaultEnvelope == null) - return this; - - System.Diagnostics.Debug.Assert(defaultEnvelope.Length == 4); - - var minX = Min.X > defaultEnvelope[0] ? Min.X : defaultEnvelope[0]; - var minY = Min.Y > defaultEnvelope[1] ? Min.Y : defaultEnvelope[1]; - var maxX = Max.X < defaultEnvelope[2] ? Max.X : defaultEnvelope[2]; - var maxY = Max.Y < defaultEnvelope[3] ? Max.Y : defaultEnvelope[3]; - - return new BoundingBox(minX, minY, maxX, maxY); - } - - /// - /// Creates a geometry (Polygon) that resembles this bounding box. - /// - /// - public Geometry ToGeometry() - { - var linearRing = - new LinearRing(new[] - { - Min.Clone(), new Point(Min.X, Max.Y), - Max.Clone(), new Point(Max.X, Min.Y), - Min.Clone() - }); - return new Polygon(linearRing, null); - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/Curve.cs b/SharpMap/Geometries/Curve.cs deleted file mode 100644 index 4d164250..00000000 --- a/SharpMap/Geometries/Curve.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// A Curve is a one-dimensional geometric object usually stored as a sequence of points, - /// with the subtype of Curve specifying the form of the interpolation between points. - /// - public abstract class Curve : Geometry, ILineal - { - /// - /// The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. - /// - public override int Dimension - { - get { return 1; } - } - - /// - /// The length of this Curve in its associated spatial reference. - /// - public abstract double Length { get; } - - /// - /// The start point of this Curve. - /// - public abstract Point StartPoint { get; } - - /// - /// The end point of this Curve. - /// - public abstract Point EndPoint { get; } - - /// - /// Returns true if this Curve is closed (StartPoint = EndPoint). - /// - public bool IsClosed - { - get { return (StartPoint.Equals(EndPoint)); } - } - - /// - /// true if this Curve is closed (StartPoint = EndPoint) and - /// this Curve is simple (does not pass through the same point more than once). - /// - public abstract bool IsRing { get; } - - /// - /// The position of a point on the line, parameterised by length. - /// - /// - /// - public abstract Point Value(double t); - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.Curve; - } - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/GeoAPIEx.cs b/SharpMap/Geometries/GeoAPIEx.cs index b5bbc5f1..77de90f1 100644 --- a/SharpMap/Geometries/GeoAPIEx.cs +++ b/SharpMap/Geometries/GeoAPIEx.cs @@ -1,11 +1,9 @@ using SharpMap; -using SharpMap.Utilities; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Reflection; -using System.Runtime.ExceptionServices; using NetTopologySuite.Geometries; using SharpMap.Rendering; diff --git a/SharpMap/Geometries/Geometry.cs b/SharpMap/Geometries/Geometry.cs deleted file mode 100644 index 6f59faab..00000000 --- a/SharpMap/Geometries/Geometry.cs +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using SharpMap.Converters.WellKnownBinary; -using SharpMap.Converters.WellKnownText; -#if !DotSpatialProjections -using ProjNet.CoordinateSystems; -#else -using DotSpatial.Projections; -#endif -namespace SharpMap.Geometries -{ - /// - /// is the root class of the Geometry Object Model hierarchy. - /// is an abstract (non-instantiable) class. - /// - /// - /// The instantiable subclasses of defined in the specification are restricted to 0, 1 and twodimensional - /// geometric objects that exist in two-dimensional coordinate space (R^2). - /// All instantiable geometry classes described in this specification are defined so that valid instances of a - /// geometry class are topologically closed (i.e. all defined geometries include their boundary). - /// - [Serializable] - public abstract class Geometry : IGeometry, IEquatable - { -#if !DotSpatialProjections - private ICoordinateSystem _SpatialReference; -#else - private ProjectionInfo _SpatialReference; -#endif - #region IGeometry Members - - /// - /// Gets or sets the spatial reference system associated with the . - /// A may not have had a spatial reference system defined for - /// it, in which case *spatialRef will be NULL. - /// -#if !DotSpatialProjections - public ICoordinateSystem SpatialReference -#else - public ProjectionInfo SpatialReference -#endif - { - get { return _SpatialReference; } - set { _SpatialReference = value; } - } - - // The following are methods that should be implemented on a geometry object according to - // the OpenGIS Simple Features Specification - - /// - /// Returns 'true' if this Geometry is 'spatially equal' to anotherGeometry - /// - public virtual bool Equals(Geometry other) - { - return SpatialRelations.Equals(this, other); - } - - #endregion - - #region "Basic Methods on Geometry" - - /// - /// The inherent dimension of this object, which must be less than or equal - /// to the coordinate dimension. - /// - /// This specification is restricted to geometries in two-dimensional coordinate space. - public abstract int Dimension { get; } - - /// - /// User Data Associated with the geometry object - /// - public object UserData { get; set; } - - - /// - /// The minimum bounding box for this , returned as a . The - /// polygon is defined by the corner points of the bounding box ((MINX, MINY), (MAXX, MINY), (MAXX, - /// MAXY), (MINX, MAXY), (MINX, MINY)). - /// - /// The envelope is actually the converted into a polygon. - /// - public Geometry Envelope() - { - BoundingBox box = GetBoundingBox(); - Polygon envelope = new Polygon(); - envelope.ExteriorRing.Vertices.Add(box.Min); //minx miny - envelope.ExteriorRing.Vertices.Add(new Point(box.Max.X, box.Min.Y)); //maxx minu - envelope.ExteriorRing.Vertices.Add(box.Max); //maxx maxy - envelope.ExteriorRing.Vertices.Add(new Point(box.Min.X, box.Max.Y)); //minx maxy - envelope.ExteriorRing.Vertices.Add(envelope.ExteriorRing.StartPoint); //close ring - return envelope; - } - - - /// - /// The minimum bounding box for this , returned as a . - /// - /// - public abstract BoundingBox GetBoundingBox(); - - /// - /// Exports this to a specific well-known text representation of . - /// - public string AsText() - { - return GeometryToWKT.Write(this); - } - - /// - /// Exports this to a specific well-known binary representation of . - /// - public byte[] AsBinary() - { - return GeometryToWKB.Write(this); - } - - /// - /// Returns a WellKnownText representation of the - /// - /// Well-known text - public override string ToString() - { - return AsText(); - } - - /// - /// Returns 'true' if this is the empty geometry . If true, then this - /// represents the empty point set, Ø, for the coordinate space. - /// - public abstract bool IsEmpty(); - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - public abstract bool IsSimple(); - - /// - /// Returns the closure of the combinatorial boundary of this . The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - public abstract Geometry Boundary(); - - /// - /// Creates a based on a WellKnownText string - /// - /// Well-known Text - /// - public static Geometry GeomFromText(string WKT) - { - return GeometryFromWKT.Parse(WKT); - } - - /// - /// Creates a based on a WellKnownBinary byte array - /// - /// Well-known Binary - /// - public static Geometry GeomFromWKB(byte[] WKB) - { - return GeometryFromWKB.Parse(WKB); - } - - /// - /// Gets the geometry type of this class - /// - public virtual GeometryType2 GeometryType - { - get { return GeometryType2.Geometry; } - } - - #endregion - - #region "Methods for testing Spatial Relations between geometric objects" - - /// - /// Returns 'true' if this Geometry is ‘spatially disjoint’ from another . - /// - public virtual bool Disjoint(Geometry geom) - { - return SpatialRelations.Disjoint(this, geom); - } - - /// - /// Returns 'true' if this ‘spatially intersects’ another . - /// - public virtual bool Intersects(Geometry geom) - { - return SpatialRelations.Intersects(this, geom); - } - - /// - /// Returns 'true' if this ‘spatially touches’ another . - /// - public virtual bool Touches(Geometry geom) - { - return SpatialRelations.Touches(this, geom); - } - - /// - /// Returns 'true' if this ‘spatially crosses’ another . - /// - public virtual bool Crosses(Geometry geom) - { - return SpatialRelations.Crosses(this, geom); - } - - /// - /// Returns 'true' if this is ‘spatially within’ another . - /// - public virtual bool Within(Geometry geom) - { - return SpatialRelations.Within(this, geom); - } - - /// - /// Returns 'true' if this ‘spatially contains’ another . - /// - public virtual bool Contains(Geometry geom) - { - return SpatialRelations.Contains(this, geom); - } - - /// - /// Returns 'true' if this 'spatially overlaps' another . - /// - public virtual bool Overlaps(Geometry geom) - { - return SpatialRelations.Overlaps(this, geom); - } - - - /// - /// Returns 'true' if this is spatially related to another , by testing - /// for intersections between the Interior, Boundary and Exterior of the two geometries - /// as specified by the values in the intersectionPatternMatrix - /// - /// to relate to - /// Intersection Pattern - /// True if spatially related - public bool Relate(Geometry other, string intersectionPattern) - { - throw new NotImplementedException(); - } - - #endregion - - #region "Methods that support Spatial Analysis" - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - public abstract double Distance(Geometry geom); - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - public abstract Geometry Buffer(double d); - - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - public abstract Geometry ConvexHull(); - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - public abstract Geometry Intersection(Geometry geom); - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - public abstract Geometry Union(Geometry geom); - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - public abstract Geometry Difference(Geometry geom); - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - public abstract Geometry SymDifference(Geometry geom); - - #endregion - - /// - /// This method must be overridden using 'public new [derived_data_type] Clone()' - /// - /// Copy of Geometry - public Geometry Clone() - { - throw (new ApplicationException("Clone() has not been implemented on derived datatype")); - } - - /// - /// Determines whether the specified is equal to the current . - /// - /// The to compare with the current . - /// true if the specified is equal to the current ; otherwise, false - public override bool Equals(object obj) - { - if (obj == null) - return false; - else - { - Geometry g = obj as Geometry; - if (g == null) - return false; - else - return Equals(g); - } - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - return AsBinary().GetHashCode(); - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/GeometryCollection.cs b/SharpMap/Geometries/GeometryCollection.cs deleted file mode 100644 index 7e5179b7..00000000 --- a/SharpMap/Geometries/GeometryCollection.cs +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace SharpMap.Geometries -{ - /// - /// A GeometryCollection is a geometry that is a collection of 1 or more geometries. - /// - /// - /// All the elements in a GeometryCollection must be in the same Spatial Reference. This is also the Spatial - /// Reference for the GeometryCollection.
    - /// GeometryCollection places no other constraints on its elements. Subclasses of GeometryCollection may - /// restrict membership based on dimension and may also place other constraints on the degree of spatial overlap - /// between elements. - ///
    - public class GeometryCollection : Geometry, IGeometryCollection, IEnumerable - { - private IList _Geometries; - - /// - /// Initializes a new GeometryCollection - /// - public GeometryCollection() - { - _Geometries = new Collection(); - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry - public virtual Geometry this[int index] - { - get { return _Geometries[index]; } - } - - /// - /// Gets or sets the GeometryCollection - /// - public virtual IList Collection - { - get { return _Geometries; } - set { _Geometries = value; } - } - - #region IEnumerable Members - - /// - /// Gets an enumerator for enumerating the geometries in the GeometryCollection - /// - /// - public virtual IEnumerator GetEnumerator() - { - foreach (Geometry g in Collection) - yield return g; - } - - /// - /// Gets an enumerator for enumerating the geometries in the GeometryCollection - /// - IEnumerator IEnumerable.GetEnumerator() - { - foreach (Geometry g in Collection) - yield return g; - } - - #endregion - - #region IGeometryCollection Members - - /// - /// Gets the number of geometries in the collection. - /// - public virtual int NumGeometries - { - get { return _Geometries.Count; } - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - public virtual Geometry Geometry(int N) - { - return _Geometries[N]; - } - - /// - /// Returns empty of all the geometries are empty or the collection is empty - /// - /// true of collection is empty - public override bool IsEmpty() - { - if (_Geometries == null) - return true; - for (int i = 0; i < _Geometries.Count; i++) - if (!_Geometries[i].IsEmpty()) - return false; - return true; - } - - /// - /// The inherent dimension of this Geometry object, which must be less than or equal - /// to the coordinate dimension. - /// - /// This specification is restricted to geometries in two-dimensional coordinate space. - public override int Dimension - { - get - { - int dim = 0; - for (int i = 0; i < Collection.Count; i++) - dim = (dim < Collection[i].Dimension ? Collection[i].Dimension : dim); - return dim; - } - } - - /// - /// The minimum bounding box for this Geometry, returned as a BoundingBox. - /// - /// - public override BoundingBox GetBoundingBox() - { - if (Collection.Count == 0) - return null; - BoundingBox b = this[0].GetBoundingBox(); - for (int i = 0; i < Collection.Count; i++) - b = b.Join(Collection[i].GetBoundingBox()); - return b; - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - throw new NotImplementedException(); - } - - /// - /// Returns the closure of the combinatorial boundary of this Geometry. The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - /// Closure of the combinatorial boundary of this Geometry - public override Geometry Boundary() - { - throw new NotImplementedException(); - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - /// Geometry to calculate distance to - /// Shortest distance between any two points in the two geometries - public override double Distance(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - #endregion - - /// - /// Determines whether this GeometryCollection is spatially equal to the GeometryCollection 'g' - /// - /// - /// True if the GeometryCollections are equals - public bool Equals(GeometryCollection g) - { - if (g == null) - return false; - if (g.Collection.Count != Collection.Count) - return false; - for (int i = 0; i < g.Collection.Count; i++) - if (!g.Collection[i].Equals((Geometry) Collection[i])) - return false; - return true; - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - int hash = 0; - for (int i = 0; i < _Geometries.Count; i++) - hash = hash ^ _Geometries[i].GetHashCode(); - return hash; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new GeometryCollection Clone() - { - GeometryCollection geoms = new GeometryCollection(); - for (int i = 0; i < _Geometries.Count; i++) - geoms.Collection.Add((Geometry) _Geometries[i].Clone()); - return geoms; - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.GeometryCollection; - } - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/GeometryType.cs b/SharpMap/Geometries/GeometryType.cs deleted file mode 100644 index 24b3d7c0..00000000 --- a/SharpMap/Geometries/GeometryType.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// Enumeration of Simple Features Geometry types - /// - public enum GeometryType2 - { - /// - /// Geometry is the root class of the hierarchy. Geometry is an abstract (non-instantiable) class. - /// - Geometry = 0, - /// - /// A Point is a 0-dimensional geometry and represents a single location in coordinate space. - /// - Point = 1, - /// - /// A curve is a one-dimensional geometric object usually stored as a sequence of points, - /// with the subtype of curve specifying the form of the interpolation between points. - /// - Curve = 2, - /// - /// A LineString is a curve with linear interpolation between points. Each consecutive - /// pair of points defines a line segment. - /// - LineString = 3, - /// - /// A Surface is a two-dimensional geometric object. - /// - Surface = 4, - /// - /// A Polygon is a planar surface, defined by 1 exterior boundary and 0 or more interior - /// boundaries. Each interior boundary defines a hole in the polygon. - /// - Polygon = 5, - /// - /// A GeometryCollection is a geometry that is a collection of 1 or more geometries. - /// - GeometryCollection = 6, - /// - /// A MultiPoint is a 0 dimensional geometric collection. The elements of a MultiPoint - /// are restricted to Points. The points are not connected or ordered. - /// - MultiPoint = 7, - /// - /// A MultiCurve is a one-dimensional GeometryCollection whose elements are Curves. - /// - MultiCurve = 8, - /// - /// A MultiLineString is a MultiCurve whose elements are LineStrings. - /// - MultiLineString = 9, - /// - /// A MultiSurface is a two-dimensional geometric collection whose elements are - /// surfaces. The interiors of any two surfaces in a MultiSurface may not intersect. - /// The boundaries of any two elements in a MultiSurface may intersect at most at a - /// finite number of points. - /// - MultiSurface = 10, - /// - /// A MultiPolygon is a MultiSurface whose elements are Polygons. - /// - MultiPolygon = 11, - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/IGeometry.cs b/SharpMap/Geometries/IGeometry.cs deleted file mode 100644 index d3214a85..00000000 --- a/SharpMap/Geometries/IGeometry.cs +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -#if !DotSpatialProjections -using ProjNet.CoordinateSystems; -#else -using DotSpatial.Projections; -#endif - -namespace SharpMap.Geometries -{ - /// - /// Defines basic interface for a Geometry - /// - public interface IGeometry : IGeometryClassifier - { - #region "Basic Methods on Geometry" - - /// - /// Gets or sets the spatial reference system associated with the . - /// A may not have had a spatial reference system defined for - /// it, in which case *spatialRef will be NULL. - /// -#if !DotSpatialProjections - ICoordinateSystem SpatialReference { get; set; } -#else - ProjectionInfo SpatialReference { get; set; } -#endif - /// - /// The inherent dimension of this object, which must be less than or equal to the coordinate dimension. - /// - int Dimension { get; } - - /// - /// The minimum bounding box for this Geometry, returned as a . The - /// polygon is defined by the corner points of the bounding box ((MINX, MINY), (MAXX, MINY), (MAXX, - /// MAXY), (MINX, MAXY), (MINX, MINY)). - /// - Geometry Envelope(); - - /// - /// The minimum for this . - /// - /// for this - BoundingBox GetBoundingBox(); - - /// - /// Exports this to a specific well-known text representation of . - /// - string AsText(); - - /// - /// Exports this to a specific well-known binary representation of . - /// - byte[] AsBinary(); - - /// - /// Returns a WellKnownText representation of the - /// - /// Well-known text - string ToString(); - - /// - /// If true, then this represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this is the empty geometry - bool IsEmpty(); - - /// - /// Returns 'true' if this has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the is simple - bool IsSimple(); - - /// - /// Returns the closure of the combinatorial boundary of this . The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - /// Closure of the combinatorial boundary of this - Geometry Boundary(); - - /// - /// Returns 'true' if this is spatially related to another , by testing - /// for intersections between the Interior, Boundary and Exterior of the two geometries - /// as specified by the values in the intersectionPatternMatrix - /// - /// to relate to - /// Intersection Pattern - /// True if spatially related - bool Relate(Geometry other, string intersectionPattern); - - #endregion - - #region "Methods for testing Spatial Relations between geometric objects" - - /// - /// Returns 'true' if this is 'spatially equal' to another - /// - bool Equals(Geometry geom); - - /// - /// Returns 'true' if this is 'spatially disjoint' from another - /// - bool Disjoint(Geometry geom); - - /// - /// Returns 'true' if this 'spatially intersects' another - /// - bool Intersects(Geometry geom); - - /// - /// Returns 'true' if this 'spatially touches' another . - /// - bool Touches(Geometry geom); - - /// - /// Returns 'true' if this 'spatially crosses' another . - /// - bool Crosses(Geometry geom); - - /// - /// Returns 'true' if this is 'spatially within' another . - /// - bool Within(Geometry geom); - - /// - /// Returns 'true' if this 'spatially contains' another . - /// - bool Contains(Geometry geom); - - /// - /// Returns 'true' if this 'spatially overlaps' another . - /// - bool Overlaps(Geometry geom); - - #endregion - - #region "Methods that support Spatial Analysis" - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this . - /// - /// to calculate distance to - /// Shortest distance between any two points in the two geometries - double Distance(Geometry geom); - - /// - /// Returns a that represents all points whose distance from this - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this . - /// - /// Buffer distance - /// Buffer around - Geometry Buffer(double d); - - - /// - /// Returns a that represents the convex hull of this . - /// - /// The convex hull - Geometry ConvexHull(); - - /// - /// Returns a that represents the point set intersection of this - /// with another . - /// - /// to intersect with - /// Returns a that represents the point set intersection of this with another . - Geometry Intersection(Geometry geom); - - /// - /// Returns a that represents the point set union of this with anotherGeometry. - /// - /// Geometry to union with - /// Unioned - Geometry Union(Geometry geom); - - /// - /// Returns a that represents the point set difference of this with anotherGeometry. - /// - /// to compare to - /// - Geometry Difference(Geometry geom); - - /// - /// Returns a geometry that represents the point set symmetric difference of this with anotherGeometry. - /// - /// to compare to - /// - Geometry SymDifference(Geometry geom); - - #endregion - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/IGeometryCollection.cs b/SharpMap/Geometries/IGeometryCollection.cs deleted file mode 100644 index 276945a8..00000000 --- a/SharpMap/Geometries/IGeometryCollection.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// Interface for a GeometryCollection. A GeometryCollection is a collection of 1 or more geometries. - /// - public interface IGeometryCollection : IGeometry - { - /// - /// Returns the number of geometries in the collection. - /// - int NumGeometries { get; } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - Geometry Geometry(int N); - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/IPuntal.cs b/SharpMap/Geometries/IPuntal.cs deleted file mode 100644 index e6ef064a..00000000 --- a/SharpMap/Geometries/IPuntal.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace SharpMap.Geometries -{ - /// - /// Interface for all classes that define - /// - public interface IGeometryClassifier - { - /// - /// - /// - GeometryType2 GeometryType { get; } - } - - /// - /// Interface for all classes that represent geometries - /// - public interface IUndefined : IGeometryClassifier - {} - - /// - /// Interface for all classes that represent puntal geometries, e.g. Point, Point3D and MultiPoint - /// - public interface IPuntal : IGeometryClassifier - { - } - /// - /// Interface for all classes that represent lineal geometries, e.g. Point, Point3D and MultiPoint - /// - public interface ILineal : IGeometryClassifier - { - } - /// - /// Interface for all classes that represent polygonal geometries, e.g. Point, Point3D and MultiPoint - /// - public interface IPolygonal : IGeometryClassifier - { - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/ISpatialReference.cs b/SharpMap/Geometries/ISpatialReference.cs deleted file mode 100644 index 59674f1a..00000000 --- a/SharpMap/Geometries/ISpatialReference.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// The ISpatialRelation interface defines a set of named spatial relationship operators for geometric shape - /// objects. The behavior of these operators is described in detail in the geometry object model sub-section of - /// the Architecture section of the OpenGIS Simple Features specification. [NOT IMPLEMENTED] - /// - public interface ISpatialReference - { - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/LineString.cs b/SharpMap/Geometries/LineString.cs deleted file mode 100644 index 02908667..00000000 --- a/SharpMap/Geometries/LineString.cs +++ /dev/null @@ -1,399 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Drawing; -using SharpMap.Utilities; - -namespace SharpMap.Geometries -{ - /// - /// A LineString is a Curve with linear interpolation between points. Each consecutive pair of points defines a - /// line segment. - /// - [Serializable] - public class LineString : Curve - { - private IList _Vertices; - - /// - /// Initializes an instance of a LineString from a set of vertices - /// - /// - public LineString(IList vertices) - { - _Vertices = vertices; - } - - /// - /// Initializes an instance of a LineString - /// - public LineString() : this(new Collection()) - { - } - - /// - /// Initializes an instance of a LineString - /// - /// - public LineString(IEnumerable points) - { - Collection vertices = new Collection(); - - foreach (double[] point in points) - vertices.Add(new Point(point)); - - _Vertices = vertices; - } - - /// - /// Gets or sets the collection of vertices in this Geometry - /// - public virtual IList Vertices - { - get { return _Vertices; } - set { _Vertices = value; } - } - - /// - /// Returns the vertice where this Geometry begins - /// - /// First vertice in LineString - public override Point StartPoint - { - get - { - if (_Vertices.Count == 0) - throw new ApplicationException("No startpoint found: LineString has no vertices."); - return _Vertices[0]; - } - } - - /// - /// Gets the vertice where this Geometry ends - /// - /// Last vertice in LineString - public override Point EndPoint - { - get - { - if (_Vertices.Count == 0) - throw new ApplicationException("No endpoint found: LineString has no vertices."); - return _Vertices[_Vertices.Count - 1]; - } - } - - /// - /// Returns true if this LineString is closed and simple - /// - public override bool IsRing - { - get { return (IsClosed && IsSimple()); } - } - - /// - /// The length of this LineString, as measured in the spatial reference system of this LineString. - /// - public override double Length - { - get - { - if (Vertices.Count < 2) - return 0; - double sum = 0; - for (int i = 1; i < Vertices.Count; i++) - sum += Vertices[i].Distance(Vertices[i - 1]); - return sum; - } - } - - #region OpenGIS Methods - - /// - /// The number of points in this LineString. - /// - /// This method is supplied as part of the OpenGIS Simple Features Specification - public virtual int NumPoints - { - get { return _Vertices.Count; } - } - - /// - /// Returns the specified point N in this Linestring. - /// - /// This method is supplied as part of the OpenGIS Simple Features Specification - /// - /// - public Point Point(int N) - { - return _Vertices[N]; - } - - #endregion - - /// - /// Transforms the linestring to image coordinates, based on the map - /// - /// Map to base coordinates on - /// Linestring in image coordinates - public PointF[] TransformToImage(Map map) - { - PointF[] v = new PointF[_Vertices.Count]; - for (int i = 0; i < Vertices.Count; i++) - v[i] = Transform.WorldtoMap(_Vertices[i], map); - return v; - } - - /// - /// The position of a point on the line, parameterised by length. - /// - /// Distance down the line - /// Point at line at distance t from StartPoint - public override Point Value(double t) - { - throw new NotImplementedException(); - } - - /// - /// The minimum bounding box for this Geometry. - /// - /// BoundingBox for this geometry - public override BoundingBox GetBoundingBox() - { - if (Vertices == null || Vertices.Count == 0) - return null; - BoundingBox bbox = new BoundingBox(Vertices[0], Vertices[0]); - for (int i = 1; i < Vertices.Count; i++) - { - bbox.Min.X = Vertices[i].X < bbox.Min.X ? Vertices[i].X : bbox.Min.X; - bbox.Min.Y = Vertices[i].Y < bbox.Min.Y ? Vertices[i].Y : bbox.Min.Y; - bbox.Max.X = Vertices[i].X > bbox.Max.X ? Vertices[i].X : bbox.Max.X; - bbox.Max.Y = Vertices[i].Y > bbox.Max.Y ? Vertices[i].Y : bbox.Max.Y; - } - return bbox; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new LineString Clone() - { - LineString l = new LineString(); - for (int i = 0; i < _Vertices.Count; i++) - l.Vertices.Add(_Vertices[i].Clone()); - return l; - } - - #region "Inherited methods from abstract class Geometry" - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.LineString; - } - } - - /// - /// Checks whether this instance is spatially equal to the LineString 'l' - /// - /// LineString to compare to - /// true of the objects are spatially equal - public bool Equals(LineString l) - { - if (l == null) - return false; - if (l.Vertices.Count != Vertices.Count) - return false; - for (int i = 0; i < l.Vertices.Count; i++) - if (!l.Vertices[i].Equals(Vertices[i])) - return false; - return true; - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - int hash = 0; - for (int i = 0; i < Vertices.Count; i++) - hash = hash ^ Vertices[i].GetHashCode(); - return hash; - } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - return _Vertices == null || _Vertices.Count == 0; - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - //Collection verts = new Collection(_Vertices.Count); - Collection verts = new Collection(); - - for (int i = 0; i < _Vertices.Count; i++) - //if (!verts.Exists(delegate(SharpMap.Geometries.Point p) { return p.Equals(_Vertices[i]); })) - if (0 != verts.IndexOf(_Vertices[i])) - verts.Add(_Vertices[i]); - - return (verts.Count == _Vertices.Count - (IsClosed ? 1 : 0)); - } - - /// - /// Returns the closure of the combinatorial boundary of this Geometry. The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - /// Closure of the combinatorial boundary of this Geometry - public override Geometry Boundary() - { - throw new NotImplementedException(); - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - /// Geometry to calculate distance to - /// Shortest distance between any two points in the two geometries - public override double Distance(Geometry geom) - { - if (geom is Point) - { - IList coord0 = Vertices; - Point coord = geom as Point; - // brute force approach! - double minDist = double.MaxValue; - for (int i = 0; i < coord0.Count - 1; i++) - { - double dist = CGAlgorithms.DistancePointLine(coord, coord0[i], coord0[i + 1]); - if (dist < minDist) - { - minDist = dist; - } - } - return minDist; - } - else if (geom is LineString) - { - IList coord0 = Vertices; - IList coord1 = (geom as LineString).Vertices; - // brute force approach! - double _minDistance = double.MaxValue; - for (int i = 0; i < coord0.Count - 1; i++) - { - for (int j = 0; j < coord1.Count - 1; j++) - { - double dist = CGAlgorithms.DistanceLineLine( - coord0[i], coord0[i + 1], - coord1[j], coord1[j + 1]); - if (dist < _minDistance) - { - _minDistance = dist; - } - } - } - return _minDistance; - } - - throw new NotImplementedException(); - } - - - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - #endregion - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/LinearRing.cs b/SharpMap/Geometries/LinearRing.cs deleted file mode 100644 index 60ef317e..00000000 --- a/SharpMap/Geometries/LinearRing.cs +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; - -namespace SharpMap.Geometries -{ - /// - /// A LinearRing is a LineString that is both closed and simple. - /// - public class LinearRing : LineString - { - /// - /// Initializes an instance of a LinearRing from a set of vertices - /// - /// - public LinearRing(IList vertices) - : base(vertices) - { - } - - /// - /// Initializes an instance of a LinearRing - /// - public LinearRing() : base() - { - } - - /// - /// Initializes an instance of a LinearRing - /// - /// - public LinearRing(IEnumerable points) - : base(points) - { - } - - /// - /// Returns the area of the LinearRing - /// - public double Area - { - get - { - if (Vertices.Count < 3) - return 0; - double sum = 0; - double ax = Vertices[0].X; - double ay = Vertices[0].Y; - for (int i = 1; i < Vertices.Count - 1; i++) - { - double bx = Vertices[i].X; - double by = Vertices[i].Y; - double cx = Vertices[i + 1].X; - double cy = Vertices[i + 1].Y; - sum += ax*by - ay*bx + - ay*cx - ax*cy + - bx*cy - cx*by; - } - return Math.Abs(-sum/2); - } - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new LinearRing Clone() - { - LinearRing l = new LinearRing(); - for (int i = 0; i < Vertices.Count; i++) - l.Vertices.Add(Vertices[i].Clone()); - return l; - } - - /// - /// Tests whether a ring is oriented counter-clockwise. - /// - /// Returns true if ring is oriented counter-clockwise. - public bool IsCCW() - { - Point hip, p, prev, next; - int hii, i; - int nPts = Vertices.Count; - - // check that this is a valid ring - if not, simply return a dummy value - if (nPts < 4) return false; - - // algorithm to check if a Ring is stored in CCW order - // find highest point - hip = Vertices[0]; - hii = 0; - for (i = 1; i < nPts; i++) - { - p = Vertices[i]; - if (p.Y > hip.Y) - { - hip = p; - hii = i; - } - } - // find points on either side of highest - int iPrev = hii - 1; - if (iPrev < 0) iPrev = nPts - 2; - int iNext = hii + 1; - if (iNext >= nPts) iNext = 1; - prev = Vertices[iPrev]; - next = Vertices[iNext]; - // translate so that hip is at the origin. - // This will not affect the area calculation, and will avoid - // finite-accuracy errors (i.e very small vectors with very large coordinates) - // This also simplifies the discriminant calculation. - double prev2x = prev.X - hip.X; - double prev2y = prev.Y - hip.Y; - double next2x = next.X - hip.X; - double next2y = next.Y - hip.Y; - // compute cross-product of vectors hip->next and hip->prev - // (e.g. area of parallelogram they enclose) - double disc = next2x*prev2y - next2y*prev2x; - // If disc is exactly 0, lines are collinear. There are two possible cases: - // (1) the lines lie along the x axis in opposite directions - // (2) the line lie on top of one another - // (2) should never happen, so we're going to ignore it! - // (Might want to assert this) - // (1) is handled by checking if next is left of prev ==> CCW - - if (disc == 0.0) - { - // poly is CCW if prev x is right of next x - return (prev.X > next.X); - } - else - { - // if area is positive, points are ordered CCW - return (disc > 0.0); - } - } - - /// - /// Returns true of the Point 'p' is within the instance of this ring - /// - /// - /// - public bool IsPointWithin(Point p) - { - bool c = false; - for (int i = 0, j = Vertices.Count - 1; i < Vertices.Count; j = i++) - { - if ((((Vertices[i].Y <= p.Y) && (p.Y < Vertices[j].Y)) || - ((Vertices[j].Y <= p.Y) && (p.Y < Vertices[i].Y))) && - (p.X < - (Vertices[j].X - Vertices[i].X)*(p.Y - Vertices[i].Y)/(Vertices[j].Y - Vertices[i].Y) + - Vertices[i].X)) - c = !c; - } - return c; - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/MultiCurve.cs b/SharpMap/Geometries/MultiCurve.cs deleted file mode 100644 index 9dc4d37c..00000000 --- a/SharpMap/Geometries/MultiCurve.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// A MultiCurve is a one-dimensional GeometryCollection whose elements are Curves - /// - public abstract class MultiCurve : GeometryCollection, ILineal - { - /// - /// The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. - /// - public override int Dimension - { - get { return 1; } - } - - /// - /// Returns true if this MultiCurve is closed (StartPoint=EndPoint for each curve in this MultiCurve) - /// - public abstract bool IsClosed { get; } - - /// - /// The Length of this MultiCurve which is equal to the sum of the lengths of the element Curves. - /// - public abstract double Length { get; } - - /// - /// Returns the number of geometries in the collection. - /// - public new abstract int NumGeometries { get; } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - public new abstract Geometry Geometry(int N); - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.MultiCurve; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/MultiLineString.cs b/SharpMap/Geometries/MultiLineString.cs deleted file mode 100644 index 47e57450..00000000 --- a/SharpMap/Geometries/MultiLineString.cs +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using SharpMap.Utilities; - -namespace SharpMap.Geometries -{ - /// - /// A MultiLineString is a MultiCurve whose elements are LineStrings. - /// - [Serializable] - public class MultiLineString : MultiCurve - { - private IList _LineStrings; - - /// - /// Initializes an instance of a MultiLineString - /// - public MultiLineString() - { - _LineStrings = new Collection(); - } - - /// - /// Collection of LineStrings in the - /// - public IList LineStrings - { - get { return _LineStrings; } - set { _LineStrings = value; } - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index - public new LineString this[int index] - { - get { return _LineStrings[index]; } - } - - /// - /// Returns true if all LineStrings in this MultiLineString is closed (StartPoint=EndPoint for each LineString in this MultiLineString) - /// - public override bool IsClosed - { - get - { - for (int i = 0; i < _LineStrings.Count; i++) - if (!_LineStrings[i].IsClosed) - return false; - return true; - } - } - - /// - /// The length of this MultiLineString which is equal to the sum of the lengths of the element LineStrings. - /// - public override double Length - { - get - { - double l = 0; - for (int i = 0; i < _LineStrings.Count; i++) - l += _LineStrings[i].Length; - return l; - } - } - - /// - /// Returns the number of geometries in the collection. - /// - public override int NumGeometries - { - get { return _LineStrings.Count; } - } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - if (_LineStrings == null || _LineStrings.Count == 0) - return true; - - for (int i = 0; i < _LineStrings.Count; i++) - if (!_LineStrings[i].IsEmpty()) - return false; - - return true; - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - throw new NotImplementedException(); - } - - /// - /// Returns the closure of the combinatorial boundary of this Geometry. The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - /// Closure of the combinatorial boundary of this Geometry - public override Geometry Boundary() - { - throw new NotImplementedException(); - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - /// Geometry to calculate distance to - /// Shortest distance between any two points in the two geometries - public override double Distance(Geometry geom) - { - if (geom is Point) - { - Point coord = geom as Point; - // brute force approach! - double minDist = double.MaxValue; - foreach (var ls in _LineStrings) - { - IList coord0 = ls.Vertices; - for (int i = 0; i < coord0.Count - 1; i++) - { - double dist = CGAlgorithms.DistancePointLine(coord, coord0[i], coord0[i + 1]); - if (dist < minDist) - { - minDist = dist; - } - } - } - return minDist; - } - else if (geom is LineString) - { - IList coord1 = (geom as LineString).Vertices; - // brute force approach! - double _minDistance = double.MaxValue; - foreach (var ls in _LineStrings) - { - IList coord0 = ls.Vertices; - for (int i = 0; i < coord0.Count - 1; i++) - { - for (int j = 0; j < coord1.Count - 1; j++) - { - double dist = CGAlgorithms.DistanceLineLine( - coord0[i], coord0[i + 1], - coord1[j], coord1[j + 1]); - if (dist < _minDistance) - { - _minDistance = dist; - } - } - } - } - return _minDistance; - } - - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - public override Geometry Geometry(int N) - { - return _LineStrings[N]; - } - - /// - /// The minimum bounding box for this Geometry. - /// - /// - public override BoundingBox GetBoundingBox() - { - if (_LineStrings == null || _LineStrings.Count == 0) - return null; - BoundingBox bbox = _LineStrings[0].GetBoundingBox(); - for (int i = 1; i < _LineStrings.Count; i++) - bbox = bbox.Join(_LineStrings[i].GetBoundingBox()); - return bbox; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new MultiLineString Clone() - { - MultiLineString geoms = new MultiLineString(); - for (int i = 0; i < _LineStrings.Count; i++) - geoms.LineStrings.Add(_LineStrings[i].Clone()); - return geoms; - } - - /// - /// Gets an enumerator for enumerating the geometries in the GeometryCollection - /// - /// - public override IEnumerator GetEnumerator() - { - foreach (LineString l in _LineStrings) - yield return l; - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.MultiLineString; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/MultiPoint.cs b/SharpMap/Geometries/MultiPoint.cs deleted file mode 100644 index a6bae3e5..00000000 --- a/SharpMap/Geometries/MultiPoint.cs +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace SharpMap.Geometries -{ - /// - /// A MultiPoint is a 0 dimensional geometric collection. The elements of a MultiPoint are - /// restricted to Points. The points are not connected or ordered. - /// - public class MultiPoint : GeometryCollection, IPuntal - { - private IList _Points; - - /// - /// Initializes a new MultiPoint collection - /// - public MultiPoint() - { - _Points = new Collection(); - } - - /// - /// Initializes a new MultiPoint collection - /// - public MultiPoint(IEnumerable points) - { - _Points = new Collection(); - foreach (double[] point in points) - _Points.Add(new Point(point[0], point[1])); - } - - /// - /// Gets the n'th point in the MultiPoint collection - /// - /// Index in collection - /// Point - public new Point this[int n] - { - get { return _Points[n]; } - } - - /// - /// Gets or sets the MultiPoint collection - /// - public IList Points - { - get { return _Points; } - set { _Points = value; } - } - - /// - /// Returns the number of geometries in the collection. - /// - public override int NumGeometries - { - get { return _Points.Count; } - } - - /// - /// The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. - /// - public override int Dimension - { - get { return 0; } - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - public new Point Geometry(int N) - { - return _Points[N]; - } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - return (_Points != null && _Points.Count == 0); - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - throw new NotImplementedException(); - } - - /// - /// The boundary of a MultiPoint is the empty set (null). - /// - /// - public override Geometry Boundary() - { - return null; - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - /// Geometry to calculate distance to - /// Shortest distance between any two points in the two geometries - public override double Distance(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// The minimum bounding box for this Geometry. - /// - /// - public override BoundingBox GetBoundingBox() - { - if (_Points == null || _Points.Count == 0) - return null; - BoundingBox bbox = new BoundingBox(_Points[0], _Points[0]); - for (int i = 1; i < _Points.Count; i++) - { - bbox.Min.X = _Points[i].X < bbox.Min.X ? _Points[i].X : bbox.Min.X; - bbox.Min.Y = _Points[i].Y < bbox.Min.Y ? _Points[i].Y : bbox.Min.Y; - bbox.Max.X = _Points[i].X > bbox.Max.X ? _Points[i].X : bbox.Max.X; - bbox.Max.Y = _Points[i].Y > bbox.Max.Y ? _Points[i].Y : bbox.Max.Y; - } - return bbox; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new MultiPoint Clone() - { - MultiPoint geoms = new MultiPoint(); - for (int i = 0; i < _Points.Count; i++) - geoms.Points.Add(_Points[i].Clone()); - return geoms; - } - - /// - /// Gets an enumerator for enumerating the geometries in the GeometryCollection - /// - /// - public override IEnumerator GetEnumerator() - { - foreach (Point p in _Points) - yield return p; - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.MultiPoint; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/MultiPolygon.cs b/SharpMap/Geometries/MultiPolygon.cs deleted file mode 100644 index 733189d5..00000000 --- a/SharpMap/Geometries/MultiPolygon.cs +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace SharpMap.Geometries -{ - /// - /// A MultiPolygon is a MultiSurface whose elements are Polygons. - /// - [Serializable] - public class MultiPolygon : MultiSurface - { - private IList _Polygons; - - /// - /// Instantiates a MultiPolygon - /// - public MultiPolygon() - { - _Polygons = new Collection(); - } - - /// - /// Collection of polygons in the multipolygon - /// - public IList Polygons - { - get { return _Polygons; } - set { _Polygons = value; } - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index - public new Polygon this[int index] - { - get { return _Polygons[index]; } - } - - /// - /// Returns summed area of the Polygons in the MultiPolygon collection - /// - public override double Area - { - get - { - double result = 0; - for (int i = 0; i < _Polygons.Count; i++) - result += _Polygons[i].Area; - return result; - } - } - - /// - /// The mathematical centroid for the surfaces as a Point. - /// The result is not guaranteed to be on any of the surfaces. - /// - public override Point Centroid - { - get { throw new NotImplementedException(); } - } - - /// - /// A point guaranteed to be on this Surface. - /// - public override Point PointOnSurface - { - get { throw new NotImplementedException(); } - } - - /// - /// Returns the number of geometries in the collection. - /// - public override int NumGeometries - { - get { return _Polygons.Count; } - } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - if (_Polygons == null || _Polygons.Count == 0) - return true; - for (int i = 0; i < _Polygons.Count; i++) - if (!_Polygons[i].IsEmpty()) - return false; - return true; - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - throw new NotImplementedException(); - } - - /// - /// Returns the closure of the combinatorial boundary of this Geometry. The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - /// Closure of the combinatorial boundary of this Geometry - public override Geometry Boundary() - { - throw new NotImplementedException(); - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - /// Geometry to calculate distance to - /// Shortest distance between any two points in the two geometries - public override double Distance(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns an indexed geometry in the collection - /// - /// Geometry index - /// Geometry at index N - public override Geometry Geometry(int N) - { - return _Polygons[N]; - } - - /// - /// Returns the bounding box of the object - /// - /// bounding box - public override BoundingBox GetBoundingBox() - { - if (_Polygons == null || _Polygons.Count == 0) - return null; - BoundingBox bbox = Polygons[0].GetBoundingBox(); - for (int i = 1; i < Polygons.Count; i++) - bbox = bbox.Join(Polygons[i].GetBoundingBox()); - return bbox; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new MultiPolygon Clone() - { - MultiPolygon geoms = new MultiPolygon(); - for (int i = 0; i < _Polygons.Count; i++) - geoms.Polygons.Add(_Polygons[i].Clone()); - return geoms; - } - - /// - /// Gets an enumerator for enumerating the geometries in the GeometryCollection - /// - /// - public override IEnumerator GetEnumerator() - { - foreach (Polygon p in _Polygons) - yield return p; - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.MultiPolygon; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/MultiSurface.cs b/SharpMap/Geometries/MultiSurface.cs deleted file mode 100644 index 7c53d571..00000000 --- a/SharpMap/Geometries/MultiSurface.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// A MultiSurface is a two-dimensional geometric collection whose elements are surfaces. The interiors of any - /// two surfaces in a MultiSurface may not intersect. The boundaries of any two elements in a MultiSurface may - /// intersect at most at a finite number of points. - /// - /// - /// MultiSurface is a non-instantiable class in this specification, it defines a set of methods for its subclasses and - /// is included for reasons of extensibility. The instantiable subclass of MultiSurface is MultiPolygon, - /// corresponding to a collection of Polygons. - /// - public abstract class MultiSurface : GeometryCollection, IPolygonal - { - /// - /// The area of this Surface, as measured in the spatial reference system of this Surface. - /// - public abstract double Area { get; } - - /// - /// The mathematical centroid for this Surface as a Point. - /// The result is not guaranteed to be on this Surface. - /// - public abstract Point Centroid { get; } - - /// - /// A point guaranteed to be on this Surface. - /// - public abstract Point PointOnSurface { get; } - - /// - /// The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. - /// - public override int Dimension - { - get { return 2; } - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.MultiSurface; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/Point.cs b/SharpMap/Geometries/Point.cs deleted file mode 100644 index 1a79a281..00000000 --- a/SharpMap/Geometries/Point.cs +++ /dev/null @@ -1,492 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Drawing; -using SharpMap.Utilities; - -namespace SharpMap.Geometries -{ - /// - /// A Point is a 0-dimensional geometry and represents a single location in 2D coordinate space. A Point has a x coordinate - /// value and a y-coordinate value. The boundary of a Point is the empty set. - /// - [Serializable] - public class Point : Geometry, IComparable, IPuntal - { - //private bool _isEmpty; - private double _x; - private double _y; - - /// - /// Null ordinate value - /// - public static readonly double NullOrdinate = Double.NaN; - - /// - /// Initializes a new Point - /// - /// X coordinate - /// Y coordinate - public Point(double x, double y) - { - _x = x; - _y = y; - } - - /// - /// Initializes a new empty Point - /// - public Point() : this(NullOrdinate, NullOrdinate) //: this(0d, 0d) - { - //_isEmpty = true; - } - - /// - /// Create a new point by a douuble[] array - /// - /// - public Point(double[] point) - { - if (point.Length < 2) - throw new Exception("Only 2 dimensions are supported for points"); - - _x = point[0]; - _y = point[1]; - } - - /// - /// Sets whether this object is empty - /// - protected bool SetIsEmpty - { - set - { - if (value) - _x = NullOrdinate;// _isEmpty = value; - else - { - _x = 0d; - _y = 0d; - } - } - } - - /// - /// Gets or sets the X coordinate of the point - /// - public double X - { - get - { - if (!IsEmptyPoint) - return _x; - throw new ApplicationException("Point is empty"); - } - set - { - _x = value; - //_isEmpty = false; - } - } - - /// - /// Gets or sets the Y coordinate of the point - /// - public double Y - { - get - { - if (!IsEmptyPoint) - return _y; - throw new ApplicationException("Point is empty"); - } - set - { - _y = value; - //_isEmpty = false; - } - } - - /// - /// Returns part of coordinate. Index 0 = X, Index 1 = Y - /// - /// - /// - public virtual double this[uint index] - { - get - { - if (IsEmptyPoint) - throw new ApplicationException("Point is empty"); - if (index == 0) - return X; - if - (index == 1) - return Y; - throw (new Exception("Point index out of bounds")); - } - set - { - if (index == 0) - X = value; - else if (index == 1) - Y = value; - else - throw (new Exception("Point index out of bounds")); - //_isEmpty = false; - } - } - - /// - /// Returns the number of ordinates for this point - /// - public virtual int NumOrdinates - { - get { return 2; } - } - - #region IComparable Members - - /// - /// Comparator used for ordering point first by ascending X, then by ascending Y. - /// - /// - /// - public virtual int CompareTo(Point other) - { - if (X < other.X || X == other.X && Y < other.Y) - return -1; - if (X > other.X || X == other.X && Y > other.Y) - return 1; - return 0; - } - - #endregion - - /// - /// exports a point into a 2-dimensional double array - /// - /// - public double[] ToDoubleArray() - { - return new[] {_x, _y}; - } - - /// - /// Returns a point based on degrees, minutes and seconds notation. - /// For western or southern coordinates, add minus '-' in front of all longitude and/or latitude values - /// - /// Longitude degrees - /// Longitude minutes - /// Longitude seconds - /// Latitude degrees - /// Latitude minutes - /// Latitude seconds - /// Point - public static Point FromDMS(double longDegrees, double longMinutes, double longSeconds, - double latDegrees, double latMinutes, double latSeconds) - { - return new Point(longDegrees + longMinutes/60 + longSeconds/3600, - latDegrees + latMinutes/60 + latSeconds/3600); - } - - /// - /// Returns a 2D instance from this - /// - /// - public Point AsPoint() - { - return new Point(_x, _y); - } - - /// - /// Transforms the point to image coordinates, based on the map - /// - /// Map to base coordinates on - /// point in image coordinates - public PointF TransformToImage(Map map) - { - return Transform.WorldtoMap(this, map); - } - - /// - /// This method must be overridden using 'public new [derived_data_type] Clone()' - /// - /// Clone - public new Point Clone() - { - return new Point(X, Y); - } - - #region Operators - - /// - /// Vector + Vector - /// - /// Vector - /// Vector - /// - public static Point operator +(Point v1, Point v2) - { - return new Point(v1.X + v2.X, v1.Y + v2.Y); - } - - - /// - /// Vector - Vector - /// - /// Vector - /// Vector - /// Cross product - public static Point operator -(Point v1, Point v2) - { - return new Point(v1.X - v2.X, v1.Y - v2.Y); - } - - /// - /// Vector * Scalar - /// - /// Vector - /// Scalar (double) - /// - public static Point operator *(Point m, double d) - { - return new Point(m.X*d, m.Y*d); - } - - #endregion - - #region "Inherited methods from abstract class Geometry" - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.Point; - } - } - - /// - /// The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. - /// - public override int Dimension - { - get { return 0; } - } - - /// - /// Checks whether this instance is spatially equal to the Point 'o' - /// - /// Point to compare to - /// - public virtual bool Equals(Point p) - { - return p != null && p.X == _x && p.Y == _y && IsEmptyPoint == p.IsEmptyPoint; - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - return _x.GetHashCode() ^ _y.GetHashCode() ^ IsEmptyPoint.GetHashCode(); - } - - protected bool IsEmptyPoint { get { return double.IsNaN(_x) || double.IsNaN(_y); } } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - return IsEmptyPoint; - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - /// true if the geometry is simple - public override bool IsSimple() - { - return true; - } - - /// - /// The boundary of a point is the empty set. - /// - /// null - public override Geometry Boundary() - { - return null; - } - - /// - /// Returns the distance between this geometry instance and another geometry, as - /// measured in the spatial reference system of this instance. - /// - /// - /// - public override double Distance(Geometry geom) - { - if (geom.GetType() == typeof (Point)) - { - var p = geom as Point; - return Math.Sqrt(Math.Pow(X - p.X, 2) + Math.Pow(Y - p.Y, 2)); - } - else if (geom is LineString) - { - return geom.Distance(this); - } - else if (geom is MultiLineString) - { - return geom.Distance(this); - } - else - throw new Exception("The method or operation is not implemented for this geometry type."); - } - - /// - /// Returns the distance between this point and a - /// - /// - /// - public double Distance(BoundingBox box) - { - return box.Distance(this); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - /// Buffer distance - /// Buffer around geometry - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - /// The convex hull - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - /// Geometry to intersect with - /// Returns a geometry that represents the point set intersection of this Geometry with anotherGeometry. - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - /// Geometry to union with - /// Unioned geometry - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - /// Geometry to compare to - /// Geometry - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// The minimum bounding box for this Geometry. - /// - /// - public override BoundingBox GetBoundingBox() - { - return new BoundingBox(X, Y, X, Y); - } - - /// - /// Checks whether this point touches a - /// - /// box - /// true if they touch - public bool Touches(BoundingBox box) - { - return box.Touches(this); - } - - /// - /// Checks whether this point touches another - /// - /// Geometry - /// true if they touch - public override bool Touches(Geometry geom) - { - if (geom is Point) return Equals(geom); - throw new NotImplementedException("Touches not implemented for this feature type"); - } - - /// - /// Checks whether this point intersects a - /// - /// Box - /// True if they intersect - public bool Intersects(BoundingBox box) - { - return box.Contains(this); - } - - /// - /// Returns true if this instance contains 'geom' - /// - /// Geometry - /// True if geom is contained by this instance - public override bool Contains(Geometry geom) - { - return false; - } - - #endregion - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/Point3D.cs b/SharpMap/Geometries/Point3D.cs deleted file mode 100644 index ff320a25..00000000 --- a/SharpMap/Geometries/Point3D.cs +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; - -namespace SharpMap.Geometries -{ - /// - /// A Point3D is a 0-dimensional geometry and represents a single location in 3D coordinate space. A Point3D has a x coordinate - /// value, a y-coordinate value and a z-coordinate value. The boundary of a Point3D is the empty set. - /// - [Serializable] - public class Point3D : Point - { - private double _z; - - /// - /// Initializes a new Point - /// - /// X coordinate - /// Y coordinate - /// Z coordinate - public Point3D(double x, double y, double z) : base(x, y) - { - _z = z; - } - - /// - /// Initializes a new Point - /// - /// 2D Point - /// Z coordinate - public Point3D(Point p, double z) - : base(p.X, p.Y) - { - _z = z; - } - - /// - /// Initializes a new Point at (0,0) - /// - public Point3D() : this(NullOrdinate, NullOrdinate, NullOrdinate) - { - //SetIsEmpty = true; - } - - /// - /// Create a new point by a douuble[] array - /// - /// - public Point3D(double[] point) - : base(point[0], point[1]) - { - if (point.Length != 3) - throw new Exception("Only 3 dimensions are supported for points"); - - _z = point[2]; - } - - /// - /// Gets or sets the Z coordinate of the point - /// - public double Z - { - get - { - if (!IsEmptyPoint) - return _z; - throw new ApplicationException("Point is empty"); - } - set - { - _z = value; - if (IsEmptyPoint) - SetIsEmpty = false; - } - } - - /// - /// Returns part of coordinate. Index 0 = X, Index 1 = Y, , Index 2 = Z - /// - /// - /// - public override double this[uint index] - { - get - { - if (index == 2) - { - if (IsEmptyPoint) - throw new ApplicationException("Point is empty"); - return Z; - } - return base[index]; - } - set - { - if (index == 2) - { - Z = value; - //SetIsEmpty = false; - } - else base[index] = value; - } - } - - /// - /// Returns the number of ordinates for this point - /// - public override int NumOrdinates - { - get { return 3; } - } - - #region Operators - - /// - /// Vector + Vector - /// - /// Vector - /// Vector - /// - public static Point3D operator +(Point3D v1, Point3D v2) - { - return new Point3D(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z); - } - - - /// - /// Vector - Vector - /// - /// Vector - /// Vector - /// Cross product - public static Point3D operator -(Point3D v1, Point3D v2) - { - return new Point3D(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z); - } - - /// - /// Vector * Scalar - /// - /// Vector - /// Scalar (double) - /// - public static Point3D operator *(Point3D m, double d) - { - return new Point3D(m.X*d, m.Y*d, m.Z*d); - } - - #endregion - - #region "Inherited methods from abstract class Geometry" - - /// - /// Checks whether this instance is spatially equal to the Point 'o' - /// - /// Point to compare to - /// - public bool Equals(Point3D p) - { - return base.Equals(p) && p.Z == _z; - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - return base.GetHashCode() ^ _z.GetHashCode(); - } - - /// - /// Returns the distance between this geometry instance and another geometry, as - /// measured in the spatial reference system of this instance. - /// - /// - /// - public override double Distance(Geometry geom) - { - if (geom.GetType() == typeof (Point3D)) - { - Point3D p = geom as Point3D; - return Math.Sqrt(Math.Pow(X - p.X, 2) + Math.Pow(Y - p.Y, 2) + Math.Pow(Z - p.Z, 2)); - } - return base.Distance(geom); - } - - #endregion - - /// - /// exports a point into a 3-dimensional double array - /// - /// - public new double[] ToDoubleArray() - { - return new[] {X, Y, Z}; - } - - /// - /// This method must be overridden using 'public new [derived_data_type] Clone()' - /// - /// Clone - public new Point3D Clone() - { - return new Point3D(X, Y, Z); - } - - /// - /// Checks whether the two points are spatially equal - /// - /// Point 1 - /// Point 2 - /// true if the points a spatially equal - public bool Equals(Point3D p1, Point3D p2) - { - return (p1.X == p2.X && p1.Y == p2.Y && p1.Z == p2.Z); - } - - /// - /// Comparator used for ordering point first by ascending X, then by ascending Y and then by ascending Z. - /// - /// - /// - public virtual int CompareTo(Point3D other) - { - if (X < other.X || X == other.X && Y < other.Y || X == other.X && Y == other.Y && Z < other.Z) - return -1; - if (X > other.X || X == other.X && Y > other.Y || X == other.X && Y == other.Y && Z > other.Z) - return 1; - return 0; - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/Polygon.cs b/SharpMap/Geometries/Polygon.cs deleted file mode 100644 index 3698b9bd..00000000 --- a/SharpMap/Geometries/Polygon.cs +++ /dev/null @@ -1,331 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Drawing; -using SharpMap.Utilities; - -namespace SharpMap.Geometries -{ - /// - /// A Polygon is a planar Surface, defined by 1 exterior boundary and 0 or more interior boundaries. Each - /// interior boundary defines a hole in the Polygon. - /// - /// - /// Vertices of rings defining holes in polygons are in the opposite direction of the exterior ring. - /// - [Serializable] - public class Polygon : Surface - { - private LinearRing _ExteriorRing; - private IList _InteriorRings; - - /// - /// Instatiates a polygon based on one extorier ring and a collection of interior rings. - /// - /// Exterior ring - /// Interior rings - public Polygon(LinearRing exteriorRing, IList interiorRings) - { - _ExteriorRing = exteriorRing; - _InteriorRings = interiorRings ?? new Collection(); - } - - /// - /// Instatiates a polygon based on one extorier ring. - /// - /// Exterior ring - public Polygon(LinearRing exteriorRing) : this(exteriorRing, new Collection()) - { - } - - /// - /// Instatiates a polygon - /// - public Polygon() : this(new LinearRing(), new Collection()) - { - } - - /// - /// Gets or sets the exterior ring of this Polygon - /// - /// This method is supplied as part of the OpenGIS Simple Features Specification - public LinearRing ExteriorRing - { - get { return _ExteriorRing; } - set { _ExteriorRing = value; } - } - - /// - /// Gets or sets the interior rings of this Polygon - /// - public IList InteriorRings - { - get { return _InteriorRings; } - set { _InteriorRings = value; } - } - - /// - /// Returns the number of interior rings in this Polygon - /// - /// This method is supplied as part of the OpenGIS Simple Features Specification - /// - public int NumInteriorRing - { - get { return _InteriorRings.Count; } - } - - /// - /// The area of this Surface, as measured in the spatial reference system of this Surface. - /// - public override double Area - { - get - { - double area = 0.0; - area += _ExteriorRing.Area; - bool extIsClockwise = _ExteriorRing.IsCCW(); - for (int i = 0; i < _InteriorRings.Count; i++) - //opposite direction of exterior subtracts area - if (_InteriorRings[i].IsCCW() != extIsClockwise) - area -= _InteriorRings[i].Area; - else - area += _InteriorRings[i].Area; - return area; - } - } - - /// - /// The mathematical centroid for this Surface as a Point. - /// The result is not guaranteed to be on this Surface. - /// - public override Point Centroid - { - get { return ExteriorRing.GetBoundingBox().GetCentroid(); } - } - - /// - /// A point guaranteed to be on this Surface. - /// - public override Point PointOnSurface - { - get { throw new NotImplementedException(); } - } - - /// - /// Returns the Nth interior ring for this Polygon as a LineString - /// - /// This method is supplied as part of the OpenGIS Simple Features Specification - /// - /// - public LinearRing InteriorRing(int N) - { - return _InteriorRings[N]; - } - - /// - /// Transforms the polygon to image coordinates, based on the map - /// - /// Map to base coordinates on - /// Polygon in image coordinates - public PointF[] TransformToImage(Map map) - { - int vertices = _ExteriorRing.Vertices.Count; - for (int i = 0; i < _InteriorRings.Count; i++) - vertices += _InteriorRings[i].Vertices.Count; - - PointF[] v = new PointF[vertices]; - for (int i = 0; i < _ExteriorRing.Vertices.Count; i++) - v[i] = Transform.WorldtoMap(_ExteriorRing.Vertices[i], map); - int j = _ExteriorRing.Vertices.Count; - for (int k = 0; k < _InteriorRings.Count; k++) - { - for (int i = 0; i < _InteriorRings[k].Vertices.Count; i++) - v[j + i] = Transform.WorldtoMap(_InteriorRings[k].Vertices[i], map); - j += _InteriorRings[k].Vertices.Count; - } - return v; - } - - /// - /// Returns the bounding box of the object - /// - /// bounding box - public override BoundingBox GetBoundingBox() - { - if (_ExteriorRing == null || _ExteriorRing.Vertices.Count == 0) return null; - BoundingBox bbox = new BoundingBox(_ExteriorRing.Vertices[0], _ExteriorRing.Vertices[0]); - for (int i = 1; i < _ExteriorRing.Vertices.Count; i++) - { - bbox.Min.X = Math.Min(_ExteriorRing.Vertices[i].X, bbox.Min.X); - bbox.Min.Y = Math.Min(_ExteriorRing.Vertices[i].Y, bbox.Min.Y); - bbox.Max.X = Math.Max(_ExteriorRing.Vertices[i].X, bbox.Max.X); - bbox.Max.Y = Math.Max(_ExteriorRing.Vertices[i].Y, bbox.Max.Y); - } - return bbox; - } - - /// - /// Return a copy of this geometry - /// - /// Copy of Geometry - public new Polygon Clone() - { - Polygon p = new Polygon(); - p.ExteriorRing = (LinearRing) _ExteriorRing.Clone(); - for (int i = 0; i < _InteriorRings.Count; i++) - p.InteriorRings.Add(_InteriorRings[i].Clone() as LinearRing); - return p; - } - - #region "Inherited methods from abstract class Geometry" - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.Polygon; - } - } - - /// - /// Determines if this Polygon and the specified Polygon object has the same values - /// - /// Polygon to compare with - /// - public bool Equals(Polygon p) - { - if (p == null) - return false; - if (!p.ExteriorRing.Equals(ExteriorRing)) - return false; - if (p.InteriorRings.Count != InteriorRings.Count) - return false; - for (int i = 0; i < p.InteriorRings.Count; i++) - if (!p.InteriorRings[i].Equals(InteriorRings[i])) - return false; - return true; - } - - /// - /// Serves as a hash function for a particular type. is suitable for use - /// in hashing algorithms and data structures like a hash table. - /// - /// A hash code for the current . - public override int GetHashCode() - { - int hash = ExteriorRing.GetHashCode(); - ; - for (int i = 0; i < InteriorRings.Count; i++) - hash = hash ^ InteriorRings[i].GetHashCode(); - return hash; - } - - /// - /// If true, then this Geometry represents the empty point set, Ø, for the coordinate space. - /// - /// Returns 'true' if this Geometry is the empty geometry - public override bool IsEmpty() - { - return (ExteriorRing == null) || (ExteriorRing.Vertices.Count == 0); - } - - /// - /// Returns 'true' if this Geometry has no anomalous geometric points, such as self - /// intersection or self tangency. The description of each instantiable geometric class will include the specific - /// conditions that cause an instance of that class to be classified as not simple. - /// - public override bool IsSimple() - { - throw new NotImplementedException(); - } - - /// - /// Returns the closure of the combinatorial boundary of this Geometry. The - /// combinatorial boundary is defined as described in section 3.12.3.2 of [1]. Because the result of this function - /// is a closure, and hence topologically closed, the resulting boundary can be represented using - /// representational geometry primitives - /// - public override Geometry Boundary() - { - throw new NotImplementedException(); - } - - /// - /// Returns the shortest distance between any two points in the two geometries - /// as calculated in the spatial reference system of this Geometry. - /// - public override double Distance(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents all points whose distance from this Geometry - /// is less than or equal to distance. Calculations are in the Spatial Reference - /// System of this Geometry. - /// - public override Geometry Buffer(double d) - { - throw new NotImplementedException(); - } - - /// - /// Geometry—Returns a geometry that represents the convex hull of this Geometry. - /// - public override Geometry ConvexHull() - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set intersection of this Geometry - /// with anotherGeometry. - /// - public override Geometry Intersection(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set union of this Geometry with anotherGeometry. - /// - public override Geometry Union(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set difference of this Geometry with anotherGeometry. - /// - public override Geometry Difference(Geometry geom) - { - throw new NotImplementedException(); - } - - /// - /// Returns a geometry that represents the point set symmetric difference of this Geometry with anotherGeometry. - /// - public override Geometry SymDifference(Geometry geom) - { - throw new NotImplementedException(); - } - - #endregion - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/SpatialRelations.cs b/SharpMap/Geometries/SpatialRelations.cs deleted file mode 100644 index 182d45ee..00000000 --- a/SharpMap/Geometries/SpatialRelations.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; - -namespace SharpMap.Geometries -{ - /// - /// Class defining a set of named spatial relationship operators for geometric shape objects. - /// - public class SpatialRelations - { - /// - /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as - /// reversing the primary and comparison shapes of the Within operation. - /// - /// - /// - /// True if otherGeometry is wholly contained within the source geometry. - public static bool Contains(Geometry sourceGeometry, Geometry otherGeometry) - { - return (otherGeometry.Within(sourceGeometry)); - } - - /// - /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than - /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. - /// geometry. - /// - /// - /// - /// - public static bool Crosses(Geometry g1, Geometry g2) - { - Geometry g = g2.Intersection(g1); - return (g.Intersection(g1).Dimension < Math.Max(g1.Dimension, g2.Dimension) && !g.Equals(g1) && - !g.Equals(g2)); - } - - /// - /// Returns true if otherGeometry is disjoint from the source geometry. - /// - /// - /// - /// - public static bool Disjoint(Geometry g1, Geometry g2) - { - return !g2.Intersects(g1); - } - - /// - /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. - /// - /// source geometry - /// other Geometry - /// - public static bool Equals(Geometry g1, Geometry g2) - { - if (g1 == null && g2 == null) - return true; - if (g1 == null || g2 == null) - return false; - if (g1.GetType() != g2.GetType()) - return false; - if (g1 is Point) - return (g1 as Point).Equals(g2 as Point); - if (g1 is LineString) - return (g1 as LineString).Equals(g2 as LineString); - if (g1 is Polygon) - return (g1 as Polygon).Equals(g2 as Polygon); - if (g1 is MultiPoint) - return (g1 as MultiPoint).Equals(g2 as MultiPoint); - if (g1 is MultiLineString) - return (g1 as MultiLineString).Equals(g2 as MultiLineString); - if (g1 is MultiPolygon) - return (g1 as MultiPolygon).Equals(g2 as MultiPolygon); - throw new ArgumentException("The method or operation is not implemented on this geometry type."); - } - - - /// - /// Returns true if there is any intersection between the two geometries. - /// - /// - /// - /// - public static bool Intersects(Geometry g1, Geometry g2) - { - throw new NotImplementedException(); - } - - /// - /// Returns true if the intersection of the two geometries results in an object of the same dimension as the - /// input geometries and the intersection geometry is not equal to either geometry. - /// - /// - /// - /// - public static bool Overlaps(Geometry g1, Geometry g2) - { - throw new NotImplementedException(); - } - - /// - /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. - /// - /// - /// - /// - public static bool Touches(Geometry g1, Geometry g2) - { - throw new NotImplementedException(); - } - - /// - /// Returns true if the primary geometry is wholly contained within the comparison geometry. - /// - /// - /// - /// - public static bool Within(Geometry g1, Geometry g2) - { - return g1.Contains(g2); - } - } -} \ No newline at end of file diff --git a/SharpMap/Geometries/Surface.cs b/SharpMap/Geometries/Surface.cs deleted file mode 100644 index 1277005b..00000000 --- a/SharpMap/Geometries/Surface.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -namespace SharpMap.Geometries -{ - /// - /// A Surface is a two-dimensional geometric object. - /// - /// - /// The OpenGIS Abstract Specification defines a simple Surface as consisting of a single ‘patch’ that is - /// associated with one ‘exterior boundary’ and 0 or more ‘interior’ boundaries. Simple surfaces in threedimensional - /// space are isomorphic to planar surfaces. Polyhedral surfaces are formed by ‘stitching’ together - /// simple surfaces along their boundaries, polyhedral surfaces in three-dimensional space may not be planar as - /// a whole. - /// - public abstract class Surface : Geometry, IPolygonal - { - /// - /// The area of this Surface, as measured in the spatial reference system of this Surface. - /// - public abstract double Area { get; } - - /// - /// The mathematical centroid for this Surface as a Point. - /// The result is not guaranteed to be on this Surface. - /// - public virtual Point Centroid - { - get { return GetBoundingBox().GetCentroid(); } - } - - /// - /// A point guaranteed to be on this Surface. - /// - public abstract Point PointOnSurface { get; } - - /// - /// The inherent dimension of this Geometry object, which must be less than or equal - /// to the coordinate dimension. This specification is restricted to geometries in two-dimensional coordinate - /// space. - /// - public override int Dimension - { - get { return 2; } - } - - public override GeometryType2 GeometryType - { - get - { - return GeometryType2.Surface; - } - } - - } -} \ No newline at end of file diff --git a/SharpMap/Properties/AssemblyInfo.cs b/SharpMap/Properties/AssemblyInfo.cs deleted file mode 100644 index 424d0a70..00000000 --- a/SharpMap/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("SharpMap Engine")] -[assembly: AssemblyDescription("SharpMap core components")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("SharpMap - Team")] -[assembly: AssemblyProduct("SharpMap Engine")] -[assembly: AssemblyCopyright("Copyright © 2006 Morten Nielsen\nCopyright © 2008-2016 SharpMap - Team")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2f1dbd34-6f6b-4b0b-bfb4-b24a3894de6d")] - -[assembly: InternalsVisibleTo("SharpMap.Layers.BruTile")] \ No newline at end of file diff --git a/SharpMap/Rendering/Decoration/GoogleMapsDisclamer.cs b/SharpMap/Rendering/Decoration/GoogleMapsDisclamer.cs deleted file mode 100644 index 3686385e..00000000 --- a/SharpMap/Rendering/Decoration/GoogleMapsDisclamer.cs +++ /dev/null @@ -1,319 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -#if !DotSpatialProjections -using System.Runtime.Serialization; -using IMathTransform = ProjNet.CoordinateSystems.Transformations.MathTransform; -#else -using DotSpatial.Projections; -using IMathTransform = DotSpatial.Projections.ProjectionInfo; -#endif -using System.Globalization; -using System.IO; -using System.Text.RegularExpressions; -using System.Drawing; -using GeoAPI.Geometries; -using System.Threading; -using BruTile; - -namespace SharpMap.Rendering.Decoration -{ - - /// - /// Displays Disclaimer-information as on maps.google.com - /// - /// - /// To be used when using Google Maps as BaseMap via for example BruTile - /// Calls ViewPortInfo Service at maps.google.com to get information about DisclaimerText - /// - /// Supports Async-Mode (use special .ctor) - /// - [Serializable] - public class GoogleMapsDisclaimer : MapDecoration - { - // Logging - private static readonly Common.Logging.ILog Log = Common.Logging.LogManager.GetCurrentClassLogger(); - - /// - /// Google map type enum - /// - public enum MapType - { - /// - /// Map - /// - Map = 0, - - /// - /// Images - /// - Images = 2, - - /// - /// Hybrid - /// - Hybrid = 3 - }; - - readonly MapType _mapType = MapType.Map; - readonly IMathTransform _mathTransform; -#if DotSpatialProjections - private readonly IMathTransform _to = KnownCoordinateSystems.Geographic.World.WGS1984; -#endif - //string _language = "us-EN"; - readonly EventHandler _downloadCompleteHandler; - readonly bool _runInRunAsyncMode; - readonly ITileSource _tileSource; - - private Envelope _currentDisclaimerEnvelope; - - private const string MapPrefix = "Mapdata ©"; - private const string SatellitePrefix = "Images ©"; - - /// - /// Initialize with custom parameters - /// - /// - /// IMPORTANT: In Async mode you need to use UpdateBoundingBox when the MapBox/MapImage center or ZoomLevel changes, else the text will be wrong - /// - /// Transformation to transform MapCoordinates to WGS84 - /// Type of Map Displayed - /// Optional EventHandler that is called after Disclaimer Async Download (to be used to refresh map) - /// whether to download disclaimer information async (non blocking operation) - public GoogleMapsDisclaimer(IMathTransform mapToWgs84Transform, MapType mapType, EventHandler disclaimerDownloaded, bool runInAsyncMode) : this() - { - _mathTransform = mapToWgs84Transform; - _runInRunAsyncMode = runInAsyncMode; - _downloadCompleteHandler = disclaimerDownloaded; - _mapType = mapType; - } - - /// - /// New instance of Google Maps Disclaimer - /// - public GoogleMapsDisclaimer() - { - _mathTransform = null; //Assuming WGS84 - _font = new Font(FontFamily.GenericSansSerif, (float)Math.Floor((11.0 * 72 / 96))); - //_language = Thread.CurrentThread.CurrentCulture.Name; - _tileSource = new BruTile.Web.GoogleTileSource(BruTile.Web.GoogleMapType.GoogleMap); - } - - //Regex rex = new Regex("resp && resp\\( \\[\"(?.*?)\","); - readonly Regex _rex = new Regex("GAddCopyright\\(\"(?.*?)\",\".*?\",(?[0-9\\.-]+),(?[0-9\\.-]+),(?[0-9\\.-]+),(?[0-9\\.-]+),(?\\d+),\"(?.*?)\",(?\\d+),.*?\\);", RegexOptions.Singleline); - string _disclaimerText = ""; - private readonly Font _font;// = new Font(FontFamily.GenericSansSerif, 12f); - - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// - /// - /// The - protected override Size InternalSize(Graphics g, Map map) - { - RequestDisclaimer(map); - - var s = g.MeasureString(_disclaimerText, _font); - return new Size((int)Math.Ceiling(s.Width), (int)Math.Ceiling(s.Height)); - } - - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected override void OnRender(Graphics g, Map map) - { - RequestDisclaimer(map); - - var layoutRectangle = g.ClipBounds; - var textColor = _mapType == MapType.Map - ? Color.Black - : Color.White; - - var b = new SolidBrush(OpacityColor(textColor)); - g.DrawString(_disclaimerText, _font, b, layoutRectangle); - } - - /// - /// Method to update the map's view when the disclaimer was retrieved in async mode - /// - /// The map - public void UpdateBoundingBox(Map map) - { - var level = BruTile.Utilities.GetNearestLevel(_tileSource.Schema.Resolutions, map.PixelSize); - - double[] ul, lr; - GetCorners(map, out ul, out lr); - - if (_runInRunAsyncMode) - { - DownloadDisclaimerAsync(ul, lr, level); - } - else - { - DownloadDisclaimer(ul, lr, level); - } - } - - private void GetCorners(Map map, out double[] lr, out double[] ul) - { -#if !DotSpatialProjections - ul = _mathTransform != null - ? _mathTransform.Transform(new[] {map.Envelope.MinX, map.Envelope.MaxY}) - : new[] {map.Envelope.MinX, map.Envelope.MaxY}; - lr = _mathTransform != null - ? _mathTransform.Transform(new[] {map.Envelope.MaxX, map.Envelope.MinY}) - : new[] {map.Envelope.MaxX, map.Envelope.MinY}; -#else - ul = new[] { map.Envelope.Left(), map.Envelope.Top() }; - if (_mathTransform != null) - Reproject.ReprojectPoints(ul, null, _mathTransform, _to, 0, 1); - lr = new[] {map.Envelope.Right(), map.Envelope.Bottom()}; - if (_mathTransform != null) - Reproject.ReprojectPoints(lr, null, _mathTransform, _to, 0, 1); -#endif - } - - private void RequestDisclaimer(Map map) - { - if (_currentDisclaimerEnvelope == null || !_currentDisclaimerEnvelope.Equals(map.Envelope)) - { - double[] ul, lr; - GetCorners(map, out ul, out lr); - var level = BruTile.Utilities.GetNearestLevel(_tileSource.Schema.Resolutions, map.PixelSize); - - /* - * Download only when run in Sync mode, - * else rely on setting SetBoundingBox - * (else we will flood google with requests - * during panning - */ - if (!_runInRunAsyncMode) - { - DownloadDisclaimer(ul, lr, level); - } - - _currentDisclaimerEnvelope = map.Envelope; - } - } - - private void DownloadDisclaimerAsync(double[] ul, double[] lr, string level) - { - ThreadPool.QueueUserWorkItem(delegate - { - DownloadDisclaimer(ul, lr, level); - if (_downloadCompleteHandler != null) - { - _downloadCompleteHandler(null, new EventArgs()); - } - }); - } - - private void DownloadDisclaimer(double[] ul, double[] lr, string level) - { - try - { - //level = m_TileSource.Schema.Resolutions.Count - level; - string mapType = ""; - if (_mapType == MapType.Images) - mapType = "k"; - else if (_mapType == MapType.Hybrid) - { - mapType = "h"; - } - - //string url = string.Format(CultureInfo.InvariantCulture, "http://maps.googleapis.com/maps/api/js/ViewportInfoService.GetViewportInfo?1m6&1m2&1d{0}&2d{1}&2m2&1d{2}&2d{3}&2u{7}&4s{4}&5e{6}&callback=resp&token={5}", lr[1], ul[0], ul[1], lr[0], m_Language, 12345, (int)m_MapType, level); - var url = string.Format(CultureInfo.InvariantCulture, "http://maps.google.com/maps/vp?spn={0},{1}&t={5}&z={2}&key=&mapclient=jsapi&vp={3},{4}&ev=mk", - ul[1] - lr[1], lr[0] - ul[0], level, (lr[1] + ul[1]) / 2.0, (ul[0] + lr[0]) / 2.0, mapType); - - var rq = (HttpWebRequest)WebRequest.Create(url); - rq.Referer = "http://localhost"; - rq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"; - - string json; - using (var s = rq.GetResponse().GetResponseStream()) - { - if (s == null) - throw new WebException("Failed to get web response stream"); - json = new StreamReader(s).ReadToEnd(); - } - - var mstrs = new List(); - var kstrs = new List(); - - var bbox = new Envelope(new Coordinate(ul[0],lr[1]),new Coordinate(lr[0],ul[1])); - var levelId = int.Parse(level, NumberStyles.Integer, NumberFormatInfo.InvariantInfo); - foreach (Match m in _rex.Matches(json)) - { - if (m.Groups["txt"].Success && !string.IsNullOrEmpty(m.Groups["txt"].Value)) - { - int minLevel = int.Parse(m.Groups["minlevel"].Value); - int maxLevel = int.Parse(m.Groups["maxlevel"].Value); - if (levelId < minLevel || levelId > maxLevel) - continue; - double minx = double.Parse(m.Groups["minx"].Value, CultureInfo.InvariantCulture); - double miny = double.Parse(m.Groups["miny"].Value, CultureInfo.InvariantCulture); - double maxx = double.Parse(m.Groups["maxx"].Value, CultureInfo.InvariantCulture); - double maxy = double.Parse(m.Groups["maxy"].Value, CultureInfo.InvariantCulture); - - - - if (bbox.Intersects(new Envelope(minx, maxx, miny, maxy))) - { - - if (m.Groups["type"].Value == "m") - { - if (!mstrs.Contains(m.Groups["txt"].Value)) - mstrs.Add(m.Groups["txt"].Value); - } - else - { - if (!kstrs.Contains(m.Groups["txt"].Value)) - { - kstrs.Add(m.Groups["txt"].Value); - } - } - } - } - } - - string txt = ""; - if (_mapType == MapType.Map || _mapType == MapType.Hybrid) - { - txt = MapPrefix + " " + string.Join(",", mstrs.ToArray()); - } - else if ( _mapType == MapType.Images) - { - txt = SatellitePrefix + " " + string.Join(",",kstrs.ToArray()); - } - - - if (_mapType == MapType.Hybrid) - { - txt += ", " + SatellitePrefix + " " + string.Join(",", kstrs.ToArray()); - } - - _disclaimerText = txt; - /*if (rex.IsMatch(jSon)) - { - Match m = rex.Match(jSon); - if (m.Groups["text"].Success) - { - m_DisclaymerText = m.Groups["text"].Value; - } - }*/ - } - catch (Exception ex) - { - if (Log.IsDebugEnabled) - Log.Debug(ex); - } - } - - - } -} diff --git a/SharpMap/Rendering/Symbolizer/Utility.cs b/SharpMap/Rendering/Symbolizer/Utility.cs index 39118f00..9bdf5ab6 100644 --- a/SharpMap/Rendering/Symbolizer/Utility.cs +++ b/SharpMap/Rendering/Symbolizer/Utility.cs @@ -1,7 +1,13 @@ using System; using System.Collections.Generic; using System.Drawing; - +#if NETSTANDARD +using KnownColor = SharpMap.Drawing.KnownColor; +using SmColor = SharpMap.Drawing.Color; +#else +using KnownColor = System.Drawing.KnownColor; +using SmColor = System.Drawing.Color; +#endif namespace SharpMap.Rendering.Symbolizer { /// @@ -9,17 +15,16 @@ namespace SharpMap.Rendering.Symbolizer /// public static class Utility { - private static readonly Random RNG = new Random(998762); + private static readonly Random RND = new Random(998762); private static readonly List _knownColors; static Utility() { //Get all known colors _knownColors = new List(); - _knownColors.AddRange((KnownColor[])Enum.GetValues(typeof(KnownColor))); - + _knownColors.AddRange((KnownColor[]) Enum.GetValues(typeof(KnownColor))); //We remove the system colors - _knownColors.RemoveAll(x => (int)x < 27); + _knownColors.RemoveAll(x => (int) x < 27 || (int)x > 167); } /// @@ -28,7 +33,11 @@ static Utility() /// A random color form the enumeration public static Color RandomKnownColor() { - return Color.FromKnownColor(_knownColors[RNG.Next(0, _knownColors.Count - 1)]); +#if !NETSTANDARD + return Color.FromKnownColor(_knownColors[RND.Next(0, _knownColors.Count - 1)]); +#else + return SmColor.FromKnownColor(_knownColors[RND.Next(0, _knownColors.Count - 1)]); +#endif } /// @@ -50,7 +59,7 @@ public static float ScaleSizeToDeviceUnits(float size, GraphicsUnit unit, Graphi break; case GraphicsUnit.Display: //Heuristic for printer or display needed! - size *= g.DpiY / (g.DpiY < 100 ? 72f : 100f) ; + size *= g.DpiY / (g.DpiY < 100 ? 72f : 100f); break; case GraphicsUnit.Document: size *= g.DpiY / 300; @@ -64,15 +73,15 @@ public static float ScaleSizeToDeviceUnits(float size, GraphicsUnit unit, Graphi case GraphicsUnit.World: size *= g.DpiY / g.PageScale; break; - /* - case GraphicsUnit.Pixel: - default: - //do nothing - break; - */ + /* + case GraphicsUnit.Pixel: + default: + //do nothing + break; + */ } + return (float) Math.Round(size, MidpointRounding.AwayFromZero); - } } -} \ No newline at end of file +} diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index c2bd2386..28b5249d 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -1,380 +1,51 @@ - - + + + + - Debug - AnyCPU - {C83777FC-AABB-47D9-911F-D76255D4D541} - Library - Properties - SharpMap - SharpMap - - - 3.5 - - - v4.0 - Client - ../ - - - true - full - false - bin\Debug\ - TRACE;DEBUG - prompt - 4 - true - bin\Debug\SharpMap.XML - AnyCPU - false - - - pdbonly - true - bin\Release\ - TRACE;UseMapBox - prompt - 4 - bin\Release\SharpMap.XML - AnyCPU - false + net40-client;net452;netstandard2.0 + SharpMap Engine + Copyright 2006 Morten Nielsen, Copyright 2008-2018 SharpMap - Team + SharpMap GIS Map GeoSpatial + This package contains the core components of SharpMap. + - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True - - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - - - + + - - - - - - - - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - + - - Designer - - - - - - - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - capabilities_1_3_0.xsd - - - - - - - exceptions_1_3_0.xsd - - - - - PreserveNewest - - - - - - - - - - - - - - - - + + + + - - - - - + - - + $(SolutionDir.SubString(1,1)) - - - - - - \ No newline at end of file + + diff --git a/SharpMap/SharpMap.csproj.bak b/SharpMap/SharpMap.csproj.bak new file mode 100644 index 00000000..65c38c40 --- /dev/null +++ b/SharpMap/SharpMap.csproj.bak @@ -0,0 +1,380 @@ + + + + Debug + AnyCPU + {C83777FC-AABB-47D9-911F-D76255D4D541} + Library + Properties + SharpMap + SharpMap + + + 3.5 + + + v4.0 + Client + ../ + + + true + full + false + bin\Debug\ + TRACE;DEBUG + prompt + 4 + true + bin\Debug\SharpMap.XML + AnyCPU + false + + + pdbonly + true + bin\Release\ + TRACE;UseMapBox + prompt + 4 + bin\Release\SharpMap.XML + AnyCPU + false + + + + ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll + True + + + ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll + True + + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + Properties\SharedAssemblyVersion.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + Designer + + + + + + + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + capabilities_1_3_0.xsd + + + + + + + exceptions_1_3_0.xsd + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpMap/Styles/VectorStyle.cs b/SharpMap/Styles/VectorStyle.cs index a17a1439..d9b6fff9 100644 --- a/SharpMap/Styles/VectorStyle.cs +++ b/SharpMap/Styles/VectorStyle.cs @@ -22,7 +22,13 @@ using GeoAPI.Geometries; using SharpMap.Rendering.Symbolizer; using Common.Logging; - +#if NETSTANDARD +using SmColor = SharpMap.Drawing.Color; +using Color = System.Drawing.Color; +using KnownColor = SharpMap.Drawing.KnownColor; +#else +using SmColor = System.Drawing.Color; +#endif namespace SharpMap.Styles { /// @@ -96,7 +102,7 @@ object ICloneable.Clone() return Clone(); } - #region Privates +#region Privates private Brush _fillStyle; private Pen _lineStyle; @@ -105,7 +111,7 @@ object ICloneable.Clone() private Image _symbol; private float _lineOffset; - #endregion +#endregion /// /// Initializes a new VectorStyle and sets the default values @@ -129,7 +135,7 @@ public VectorStyle() LineOffset = 0; } - #region Properties +#region Properties private PointF _symbolOffset; private float _symbolRotation; @@ -265,7 +271,7 @@ public float LineOffset /// Setting this property will lead to ignorance towards all related style settings public IPolygonSymbolizer PolygonSymbolizer { get; set; } - #endregion +#endregion /// /// Releases managed resources @@ -460,8 +466,8 @@ public static Color CreateRandomKnownColor(int alpha = 255) { var kc = (KnownColor)_rnd.Next(28, 168); return alpha == 255 - ? Color.FromKnownColor(kc) - : Color.FromArgb(alpha, Color.FromKnownColor(kc)); + ? SmColor.FromKnownColor(kc) + : Color.FromArgb(alpha, SmColor.FromKnownColor(kc)); } } -} \ No newline at end of file +} diff --git a/SharpMap/Utilities/Algorithms.cs b/SharpMap/Utilities/Algorithms.cs deleted file mode 100644 index add193cb..00000000 --- a/SharpMap/Utilities/Algorithms.cs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using SharpMap.Geometries; - -namespace SharpMap.Utilities -{ - internal class Algorithms - { - // METHOD IsCCW() IS MODIFIED FROM ANOTHER WORK AND IS ORIGINALLY BASED ON GeoTools.NET: - /* - * Copyright (C) 2002 Urban Science Applications, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - - /// - /// Tests whether a ring is oriented counter-clockwise. - /// - /// Ring to test. - /// Returns true if ring is oriented counter-clockwise. - public static bool IsCCW(LinearRing ring) - { - Point PrevPoint, NextPoint; - Point p; - - // Check if the ring has enough vertices to be a ring - if (ring.Vertices.Count < 3) throw (new ArgumentException("Invalid LinearRing")); - - // find the point with the largest Y coordinate - Point hip = ring.Vertices[0]; - int hii = 0; - for (int i = 1; i < ring.Vertices.Count; i++) - { - p = ring.Vertices[i]; - if (p.Y > hip.Y) - { - hip = p; - hii = i; - } - } - // Point left to Hip - int iPrev = hii - 1; - if (iPrev < 0) iPrev = ring.Vertices.Count - 2; - // Point right to Hip - int iNext = hii + 1; - if (iNext >= ring.Vertices.Count) iNext = 1; - PrevPoint = ring.Vertices[iPrev]; - NextPoint = ring.Vertices[iNext]; - - // translate so that hip is at the origin. - // This will not affect the area calculation, and will avoid - // finite-accuracy errors (i.e very small vectors with very large coordinates) - // This also simplifies the discriminant calculation. - double prev2x = PrevPoint.X - hip.X; - double prev2y = PrevPoint.Y - hip.Y; - double next2x = NextPoint.X - hip.X; - double next2y = NextPoint.Y - hip.Y; - // compute cross-product of vectors hip->next and hip->prev - // (e.g. area of parallelogram they enclose) - double disc = next2x*prev2y - next2y*prev2x; - // If disc is exactly 0, lines are collinear. There are two possible cases: - // (1) the lines lie along the x axis in opposite directions - // (2) the line lie on top of one another - // (2) should never happen, so we're going to ignore it! - // (Might want to assert this) - // (1) is handled by checking if next is left of prev ==> CCW - - if (disc == 0.0) - { - // poly is CCW if prev x is right of next x - return (PrevPoint.X > NextPoint.X); - } - else - { - // if area is positive, points are ordered CCW - return (disc > 0.0); - } - } - } -} \ No newline at end of file diff --git a/SharpMap/Utilities/CGAlgoritm.cs b/SharpMap/Utilities/CGAlgoritm.cs deleted file mode 100644 index 88b42778..00000000 --- a/SharpMap/Utilities/CGAlgoritm.cs +++ /dev/null @@ -1,292 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using SharpMap.Geometries; - -namespace SharpMap.Utilities -{ - - /// - /// Specifies and implements various fundamental Computational Geometric algorithms. - /// The algorithms supplied in this class are robust for double-precision floating point. - /// - public static class CGAlgorithms - { - /// - /// A value that indicates an orientation of clockwise, or a right turn. - /// - public const int Clockwise = -1; - /// - /// A value that indicates an orientation of clockwise, or a right turn. - /// - public const int Right = Clockwise; - - /// - /// A value that indicates an orientation of counterclockwise, or a left turn. - /// - public const int CounterClockwise = 1; - /// - /// A value that indicates an orientation of counterclockwise, or a left turn. - /// - public const int Left = CounterClockwise; - - /// - /// A value that indicates an orientation of collinear, or no turn (straight). - /// - public const int Collinear = 0; - /// - /// A value that indicates an orientation of collinear, or no turn (straight). - /// - public const int Straight = Collinear; - - - /// - /// Computes the closest point on this line segment to another point. - /// - /// The point to find the closest point to. - /// - /// A Coordinate which is the closest point on the line segment to the point p. - /// - public static Point ClosestPoint(Point p, Point LineSegFrom, Point LineSegTo) - { - var factor = ProjectionFactor(p, LineSegFrom, LineSegTo); - if (factor > 0 && factor < 1) - return Project(p, LineSegFrom, LineSegTo); - var dist0 = LineSegFrom.Distance(p); - var dist1 = LineSegTo.Distance(p); - return dist0 < dist1 ? LineSegFrom : LineSegTo; - } - - /// - /// Compute the projection of a point onto the line determined - /// by this line segment. - /// Note that the projected point may lie outside the line segment. - /// If this is the case, the projection factor will lie outside the range [0.0, 1.0]. - /// - /// - /// - public static Point Project(Point p, Point LineSegFrom, Point LineSegTo) - { - if (p.Equals(LineSegFrom) || p.Equals(LineSegTo)) - return new Point(p.X, p.Y); - - var r = ProjectionFactor(p, LineSegFrom, LineSegTo); - Point coord = new Point { X = LineSegFrom.X + r * (LineSegTo.X - LineSegFrom.X), Y = LineSegFrom.Y + r * (LineSegTo.Y - LineSegFrom.Y) }; - return coord; - } - - /// - /// Compute the projection factor for the projection of the point p - /// onto this LineSegment. The projection factor is the constant k - /// by which the vector for this segment must be multiplied to - /// equal the vector for the projection of p. - /// - /// - /// - public static double ProjectionFactor(Point p, Point LineSegFrom, Point LineSegTo) - { - if (p.Equals(LineSegFrom)) return 0.0; - if (p.Equals(LineSegTo)) return 1.0; - - // Otherwise, use comp.graphics.algorithms Frequently Asked Questions method - /* AC dot AB - r = ------------ - ||AB||^2 - r has the following meaning: - r=0 Point = A - r=1 Point = B - r<0 Point is on the backward extension of AB - r>1 Point is on the forward extension of AB - 0 - /// Computes the distance from a point p to a line segment AB. - /// Note: NON-ROBUST! - /// - /// The point to compute the distance for. - /// One point of the line. - /// Another point of the line (must be different to A). - /// The distance from p to line segment AB. - public static double DistancePointLine(Point p, Point A, Point B) - { - // if start == end, then use pt distance - if (A.Equals(B)) - return p.Distance(A); - - // otherwise use comp.graphics.algorithms Frequently Asked Questions method - /*(1) AC dot AB - r = --------- - ||AB||^2 - - r has the following meaning: - r=0 Point = A - r=1 Point = B - r<0 Point is on the backward extension of AB - r>1 Point is on the forward extension of AB - 0= 1.0) return p.Distance(B); - - - /*(2) - (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) - s = ----------------------------- - Curve^2 - - Then the distance from C to Point = |s|*Curve. - */ - - double s = ((A.Y - p.Y) * (B.X - A.X) - (A.X - p.X) * (B.Y - A.Y)) - / - ((B.X - A.X) * (B.X - A.X) + (B.Y - A.Y) * (B.Y - A.Y)); - - return Math.Abs(s) * Math.Sqrt(((B.X - A.X) * (B.X - A.X) + (B.Y - A.Y) * (B.Y - A.Y))); - } - - /// - /// Computes the perpendicular distance from a point p - /// to the (infinite) line containing the points AB - /// - /// The point to compute the distance for. - /// One point of the line. - /// Another point of the line (must be different to A). - /// The perpendicular distance from p to line AB. - public static double DistancePointLinePerpendicular(Point p, Point A, Point B) - { - // use comp.graphics.algorithms Frequently Asked Questions method - /*(2) - (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) - s = ----------------------------- - Curve^2 - - Then the distance from C to Point = |s|*Curve. - */ - - double s = ((A.Y - p.Y) * (B.X - A.X) - (A.X - p.X) * (B.Y - A.Y)) - / - ((B.X - A.X) * (B.X - A.X) + (B.Y - A.Y) * (B.Y - A.Y)); - - return Math.Abs(s) * Math.Sqrt(((B.X - A.X) * (B.X - A.X) + (B.Y - A.Y) * (B.Y - A.Y))); - } - - /// - /// Computes the distance from a line segment AB to a line segment CD. - /// Note: NON-ROBUST! - /// - /// A point of one line. - /// The second point of the line (must be different to A). - /// One point of the line. - /// Another point of the line (must be different to A). - /// The distance from line segment AB to line segment CD. - public static double DistanceLineLine(Point A, Point B, Point C, Point D) - { - // check for zero-length segments - if (A.Equals(B)) - return DistancePointLine(A, C, D); - if (C.Equals(D)) - return DistancePointLine(D, A, B); - - // AB and CD are line segments - /* from comp.graphics.algo - - Solving the above for r and s yields - (Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy) - r = ----------------------------- (eqn 1) - (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) - - (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) - s = ----------------------------- (eqn 2) - (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) - Let Point be the position vector of the intersection point, then - Point=A+r(B-A) or - Px=Ax+r(Bx-Ax) - Py=Ay+r(By-Ay) - By examining the values of r & s, you can also determine some other - limiting conditions: - If 0<=r<=1 & 0<=s<=1, intersection exists - r<0 or r>1 or s<0 or s>1 line segments do not intersect - If the denominator in eqn 1 is zero, AB & CD are parallel - If the numerator in eqn 1 is also zero, AB & CD are collinear. - - */ - double r_top = (A.Y - C.Y) * (D.X - C.X) - (A.X - C.X) * (D.Y - C.Y); - double r_bot = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X); - - double s_top = (A.Y - C.Y) * (B.X - A.X) - (A.X - C.X) * (B.Y - A.Y); - double s_bot = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X); - - if ((r_bot == 0) || (s_bot == 0)) - return Math.Min(DistancePointLine(A, C, D), - Math.Min(DistancePointLine(B, C, D), - Math.Min(DistancePointLine(C, A, B), - DistancePointLine(D, A, B)))); - - - double s = s_top / s_bot; - double r = r_top / r_bot; - - if ((r < 0) || (r > 1) || (s < 0) || (s > 1)) - //no intersection - return Math.Min(DistancePointLine(A, C, D), - Math.Min(DistancePointLine(B, C, D), - Math.Min(DistancePointLine(C, A, B), - DistancePointLine(D, A, B)))); - - return 0.0; //intersection exists - } - - /// - /// Returns the signed area for a ring. The area is positive ifthe ring is oriented CW. - /// - /// - /// - public static double SignedArea(Point[] ring) - { - if (ring.Length < 3) - return 0.0; - - double sum = 0.0; - for (int i = 0; i < ring.Length - 1; i++) - { - double bx = ring[i].X; - double by = ring[i].Y; - double cx = ring[i + 1].X; - double cy = ring[i + 1].Y; - sum += (bx + cx) * (cy - by); - } - return -sum / 2.0; - } - - /// - /// Computes the length of a linestring specified by a sequence of points. - /// - /// The points specifying the linestring. - /// The length of the linestring. - public static double Length(IList pts) - { - if (pts.Count < 1) - return 0.0; - - double sum = 0.0; - for (int i = 1; i < pts.Count; i++) - sum += pts[i].Distance(pts[i - 1]); - - return sum; - } - } -} diff --git a/UnitTests/Converters/SqlServer2008.cs b/UnitTests/Converters/SqlServer2008.cs index 73ef7115..9bbe2b71 100644 --- a/UnitTests/Converters/SqlServer2008.cs +++ b/UnitTests/Converters/SqlServer2008.cs @@ -70,13 +70,13 @@ public void Operations() gPl.SRID = 0; Geometry gPnBuffer30 = SpatialOperationsEx.Buffer(gPn, 30); - Console.WriteLine(gPnBuffer30.ToString()); + System.Diagnostics.Trace.WriteLine(gPnBuffer30.ToString()); Geometry gPnBuffer30IntersectiongPl = SpatialOperationsEx.Intersection(gPnBuffer30, gPl); - Console.WriteLine(gPnBuffer30IntersectiongPl.ToString()); + System.Diagnostics.Trace.WriteLine(gPnBuffer30IntersectiongPl.ToString()); Geometry gUnion = SpatialOperationsEx.Union(gPn, gMp, gML, gLi, gPl); - Console.WriteLine(gUnion.ToString()); + System.Diagnostics.Trace.WriteLine(gUnion.ToString()); } @@ -115,15 +115,15 @@ public void TestShapeFile() fdr.Geometry.SRID = -1; var res = ToSqlServerAndBack(fdr.Geometry); Assert.AreEqual(fdr.Geometry, res); - Console.WriteLine(string.Format("Feature {0} ({1}) converted!", i, fdr[0])); + System.Diagnostics.Trace.WriteLine(string.Format("Feature {0} ({1}) converted!", i, fdr[0])); } catch (SqlGeometryConverterException) { - Console.WriteLine(string.Format("Feature {0} ({1}) conversion failed!", i, fdr[0])); + System.Diagnostics.Trace.WriteLine(string.Format("Feature {0} ({1}) conversion failed!", i, fdr[0])); } } } } } -} \ No newline at end of file +} diff --git a/UnitTests/Converters/WKB/WKBTests.cs b/UnitTests/Converters/WKB/WKBTests.cs index 0522a374..8c69079e 100644 --- a/UnitTests/Converters/WKB/WKBTests.cs +++ b/UnitTests/Converters/WKB/WKBTests.cs @@ -85,10 +85,12 @@ public void Convert() public void TestHugeGeometryCollection() { IGeometry geom = null; - if (!File.Exists("TestData\\Base 64.txt")) - throw new IgnoreException("Test file not present!", new FileNotFoundException("TestData\\Base 64.txt")); + string filePath = Path.Combine("TestData", "Base 64.txt"); - using (var sr = new StreamReader("TestData\\Base 64.txt")) + if (!File.Exists(filePath)) + throw new IgnoreException("Test file not present!", new FileNotFoundException(filePath)); + + using (var sr = new StreamReader(filePath)) { var sb = new StringBuilder(sr.ReadLine()); while (!sr.EndOfStream) @@ -101,4 +103,4 @@ public void TestHugeGeometryCollection() Assert.IsTrue(geom.OgcGeometryType == OgcGeometryType.GeometryCollection); } } -} \ No newline at end of file +} diff --git a/UnitTests/Converters/WKT/SpatialReferenceTests.cs b/UnitTests/Converters/WKT/SpatialReferenceTests.cs index 86a7d135..b1a650c2 100644 --- a/UnitTests/Converters/WKT/SpatialReferenceTests.cs +++ b/UnitTests/Converters/WKT/SpatialReferenceTests.cs @@ -13,7 +13,7 @@ public void TestWkt() string wkt = null; Assert.DoesNotThrow(() => wkt = SharpMap.Converters.WellKnownText.SpatialReference.SridToWkt(31466)); Assert.IsNotNullOrEmpty(wkt); - Console.WriteLine("SridToWkt(31466):\n{0}", wkt); + System.Diagnostics.Trace.WriteLine("SridToWkt(31466):\n{0}", wkt); } @@ -23,7 +23,7 @@ public void TestProj4() string proj4 = null; Assert.DoesNotThrow(() => proj4 = SharpMap.Converters.WellKnownText.SpatialReference.SridToProj4(31466)); Assert.IsNotNullOrEmpty(proj4); - Console.WriteLine("SridToProj4(31466):\n{0}", proj4); + System.Diagnostics.Trace.WriteLine("SridToProj4(31466):\n{0}", proj4); } [TestCase(900913)] diff --git a/UnitTests/Data/FeatureDataSetTests.cs b/UnitTests/Data/FeatureDataSetTests.cs index 19de6124..c1b3c66f 100644 --- a/UnitTests/Data/FeatureDataSetTests.cs +++ b/UnitTests/Data/FeatureDataSetTests.cs @@ -65,6 +65,11 @@ public void TestIndexing() [Test] public void TestSerializationOfDataset() { + #if LINUX + if (!System.IO.File.Exists("libSQLite.Interop.so")) + throw new IgnoreException($"'libSQLite.Interop.so' not present"); + #endif + var fds = new FeatureDataSet { DataSetName = "Serialization", Namespace = "ns" }; using (var p = Serialization.ProviderTest.CreateProvider("managedspatialite")) { @@ -117,6 +122,10 @@ public void TestSerializationOfDataset() [Test] public void TestSerialization() { +#if LINUX + if (!System.IO.File.Exists("libSQLite.Interop.so")) + throw new IgnoreException($"'libSQLite.Interop.so' not present"); +#endif var fds = new FeatureDataSet { DataSetName = "Serialization", Namespace = "ns"}; using (var p = Serialization.ProviderTest.CreateProvider("managedspatialite")) { diff --git a/UnitTests/Data/Providers/DbTests.cs b/UnitTests/Data/Providers/DbTests.cs index 459df8a4..121d9fb5 100644 --- a/UnitTests/Data/Providers/DbTests.cs +++ b/UnitTests/Data/Providers/DbTests.cs @@ -173,7 +173,7 @@ public void Test99GetMap() System.IO.Directory.GetCurrentDirectory(), string.Format("SpatialDbProvider_{0}.png", ImplementationName)); i.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Console.WriteLine(new System.Uri(path).LocalPath); + System.Diagnostics.Trace.WriteLine(new System.Uri(path).LocalPath); } /// @@ -181,4 +181,4 @@ public void Test99GetMap() /// public abstract string ImplementationName { get; } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/DbaseReaderTests.cs b/UnitTests/Data/Providers/DbaseReaderTests.cs index 1959b45a..0a8a56f7 100644 --- a/UnitTests/Data/Providers/DbaseReaderTests.cs +++ b/UnitTests/Data/Providers/DbaseReaderTests.cs @@ -17,7 +17,7 @@ private string GetTestFile() } private string GetPathToTestDataDir() { - return Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); + return "TestData"; } [TestFixtureSetUp] diff --git a/UnitTests/Data/Providers/GeoPackageTest.cs b/UnitTests/Data/Providers/GeoPackageTest.cs index d4381636..defbba4e 100644 --- a/UnitTests/Data/Providers/GeoPackageTest.cs +++ b/UnitTests/Data/Providers/GeoPackageTest.cs @@ -15,20 +15,25 @@ public class GeoPackageTest public void Setup() { GeoAPI.GeometryServiceProvider.Instance = new NtsGeometryServices(); +#if LINUX + if (!File.Exists("libSQLite.Interop.so")) + throw new IgnoreException($"'libSQLite.Interop.so' not present"); +#endif } - [TestCase(@"C:\Downloads\geonames_belgium.gpkg")] - [TestCase(@"C:\Downloads\gdal_sample.gpkg")] - [TestCase(@"C:\Downloads\haiti-vectors-split.gpkg")] - [TestCase(@"C:\Downloads\simple_sewer_features.gpkg")] + [TestCase(@"TestData\geonames_belgium.gpkg")] + [TestCase(@"TestData\gdal_sample.gpkg")] + [TestCase(@"TestData\haiti-vectors-split.gpkg")] + [TestCase(@"TestData\simple_sewer_features.gpkg")] - public void TestGeoPackage(string file) + public void TestGeoPackage(string filePath) { - if (!File.Exists(file)) - throw new IgnoreException(string.Format("Test data not present: '{0}'!", file)); + filePath = filePath.Replace("\\", new string(Path.DirectorySeparatorChar, 1)); + if (!File.Exists(filePath)) + throw new IgnoreException(string.Format("Test data not present: '{0}'!", filePath)); GeoPackage gpkg = null; - Assert.DoesNotThrow(() => gpkg = GeoPackage.Open(file), "Opened did not prove to be a valid geo package"); + Assert.DoesNotThrow(() => gpkg = GeoPackage.Open(filePath), "Opened did not prove to be a valid geo package"); Assert.Greater(gpkg.Features.Count + gpkg.Tiles.Count, 0); @@ -108,4 +113,4 @@ private static void TestProvider(IProvider provider, GpkgContent content) } } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/GeometryFeatureProviderTest.cs b/UnitTests/Data/Providers/GeometryFeatureProviderTest.cs index 9db0b067..f305d87e 100644 --- a/UnitTests/Data/Providers/GeometryFeatureProviderTest.cs +++ b/UnitTests/Data/Providers/GeometryFeatureProviderTest.cs @@ -31,7 +31,8 @@ public void TestConcurrentExecuteIntersectionQuerysDontThrowException() Parallel.For(0, count, DoExecuteIntersectionQuery); sw.Stop(); - Console.WriteLine("\n{0} ExecuteIntersectionQuery(Envelope, FeatureDataSet) performed in {1}ms", count, sw.ElapsedMilliseconds); + System.Diagnostics.Trace.WriteLine(String.Format( + "\n{0} ExecuteIntersectionQuery(Envelope, FeatureDataSet) performed in {1}ms", count, sw.ElapsedMilliseconds)); } @@ -45,12 +46,16 @@ private void DoExecuteIntersectionQuery(int obj) var maxY = _rnd.Next((int)minY, (int)ext.MaxY); var box = new GeoAPI.Geometries.Envelope(minX, maxX, minY, maxY); - Console.WriteLine(@"{0:000}/{2:00}: Executing intersection query agains {1}", obj, box, Thread.CurrentThread.ManagedThreadId); + System.Diagnostics.Trace.WriteLine(string.Format( + @"{0:000}/{2:00}: Executing intersection query agains {1}", + obj, box, Thread.CurrentThread.ManagedThreadId)); var fds = new SharpMap.Data.FeatureDataSet(); _provider.ExecuteIntersectionQuery(box, fds); var table = fds.Tables[0]; var count = table != null ? table.Rows.Count : 0; - Console.WriteLine(@"{0:000}/{3:00}: Executed intersection query agains {1} returned {2} features", obj, box, count, Thread.CurrentThread.ManagedThreadId); + System.Diagnostics.Trace.WriteLine(string.Format( + @"{0:000}/{3:00}: Executed intersection query agains {1} returned {2} features", + obj, box, count, Thread.CurrentThread.ManagedThreadId)); } @@ -128,4 +133,4 @@ public static SharpMap.Data.FeatureDataRow FindGeoNearPoint( } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/KmlProviderTests.cs b/UnitTests/Data/Providers/KmlProviderTests.cs index 308e9ee7..a92cd678 100644 --- a/UnitTests/Data/Providers/KmlProviderTests.cs +++ b/UnitTests/Data/Providers/KmlProviderTests.cs @@ -24,7 +24,7 @@ public void SetUp() public void TestConstruction() { KmlProvider p = null; - Assert.DoesNotThrow(() => p = KmlProvider.FromKml(@"TestData\KML_Samples.kml")); + Assert.DoesNotThrow(() => p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml"))); Assert.IsNotNull(p); Assert.IsTrue(p.ConnectionID.StartsWith("KML Samples")); @@ -36,7 +36,7 @@ public void TestGetMap() var m = new Map(new Size(500, 300)); m.BackColor = Color.White; - var p = KmlProvider.FromKml(@"TestData\KML_Samples.kml"); + var p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml")); var l = new VectorLayer(p.ConnectionID, p); l.Theme = p.GetKmlTheme(); diff --git a/UnitTests/Data/Providers/ManagedSQLiteTests.cs b/UnitTests/Data/Providers/ManagedSQLiteTests.cs index 6cd56fb8..80ea318e 100644 --- a/UnitTests/Data/Providers/ManagedSQLiteTests.cs +++ b/UnitTests/Data/Providers/ManagedSQLiteTests.cs @@ -1,4 +1,5 @@ -using System; +//#if !LINUX +using System; using System.IO; using GeoAPI.Geometries; using NetTopologySuite.Operation.Distance; @@ -9,7 +10,16 @@ namespace UnitTests.Data.Providers { [NUnit.Framework.TestFixture, NUnit.Framework.Category("KnownToFailOnTeamCityAtCodebetter")] public class ManagedSQLiteTests : ProviderTest - { + { +#if LINUX + [TestFixtureSetUp] + public void FixtureSetUp() + { + if (!File.Exists("libSQLite.Interop.so")) + throw new IgnoreException($"'libSQLite.Interop.so' not present"); + } +#endif + private string GetTestDBPath() { return "Data Source=" + GetTestDataFilePath("test-2.3.sqlite") + ";"; @@ -133,3 +143,4 @@ public void TestExecuteIntersectionQueryRegion53WithTowns() } } } +//#endif diff --git a/UnitTests/Data/Providers/NtsProviderTests.cs b/UnitTests/Data/Providers/NtsProviderTests.cs index 40d61c4b..9c9a7f9a 100644 --- a/UnitTests/Data/Providers/NtsProviderTests.cs +++ b/UnitTests/Data/Providers/NtsProviderTests.cs @@ -15,12 +15,12 @@ public void FeatureWithNullDataThrowsException() /* * arrange */ - + // create datasource var ds = DataTablePointTests.CreateDataTableSource(); // add row with null value ds.BeginLoadData(); - var row = ds.LoadDataRow(new object[]{1001, null, 1, 1}, LoadOption.OverwriteChanges); + var row = ds.LoadDataRow(new object[] { 1001, null, 1, 1 }, LoadOption.OverwriteChanges); ds.EndLoadData(); var dsp = new DataTablePoint(ds, "oid", "x", "y"); @@ -36,7 +36,9 @@ public void FeatureWithNullDataThrowsException() */ Assert.That(p.SRID, Is.EqualTo(dsp.SRID)); Assert.That(p.Factory, Is.EqualTo(dsp.Factory)); +#if !LINUX Assert.That(p.GetFeatureCount(), Is.EqualTo(101)); +#endif } [Test] diff --git a/UnitTests/Data/Providers/OgrProviderTest.cs b/UnitTests/Data/Providers/OgrProviderTest.cs index 75bcad90..e21da05a 100644 --- a/UnitTests/Data/Providers/OgrProviderTest.cs +++ b/UnitTests/Data/Providers/OgrProviderTest.cs @@ -9,14 +9,18 @@ namespace UnitTests.Data.Providers [TestFixture] public class OgrProviderTest { - [Test] - public void TestCreateFromFeatureDataTable() + [TestCase("C:\\Users\\obe.IVV - AACHEN\\Downloads\\SharpMap Codeplex\\SHPFiles\\RxLevel - Idle.shp")] + public void TestCreateFromFeatureDataTable(string filePath) { var fds = new SharpMap.Data.FeatureDataSet(); + filePath = filePath.Replace("\\", new string(System.IO.Path.DirectorySeparatorChar, 1)); + if (!System.IO.File.Exists(filePath)) + throw new IgnoreException($"'{filePath}' not found."); + FeatureDataTable fdt = null; try { - var p = new Ogr("C:\\Users\\obe.IVV-AACHEN\\Downloads\\SharpMap Codeplex\\SHPFiles\\RxLevel-Idle.shp"); + var p = new Ogr(filePath); p.SRID = 4326; var layer = string.Empty; if (!string.IsNullOrEmpty(layer)) p.LayerName = layer; @@ -34,7 +38,7 @@ public void TestCreateFromFeatureDataTable() Assert.DoesNotThrow(() => Ogr.CreateFromFeatureDataTable(fdt, ((FeatureDataRow)fdt.Rows[0]).Geometry.OgcGeometryType, 4326, "Mapinfo File", - "C:\\Users\\obe.IVV-AACHEN\\Downloads\\SharpMap Codeplex\\SHPFiles\\RxLevel-Idle.tab")); + filePath)); } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/PostGisGeographyTests.cs b/UnitTests/Data/Providers/PostGisGeographyTests.cs index 2854f779..23d77621 100644 --- a/UnitTests/Data/Providers/PostGisGeographyTests.cs +++ b/UnitTests/Data/Providers/PostGisGeographyTests.cs @@ -102,7 +102,7 @@ public void FixtureSetup() } } - catch (Exception ee) + catch (Exception) { Assert.Ignore("Failed to connect to PostgreSQL/PostGIS Server"); } @@ -283,4 +283,4 @@ public void TestGetFeatureNonExisting() } } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/ProviderTest.cs b/UnitTests/Data/Providers/ProviderTest.cs index 35893a08..c3e87071 100644 --- a/UnitTests/Data/Providers/ProviderTest.cs +++ b/UnitTests/Data/Providers/ProviderTest.cs @@ -18,8 +18,7 @@ protected string TestDataPath { get { - var codeBase = Path.GetDirectoryName(GetType().Assembly.CodeBase); - return Path.Combine(new Uri(codeBase).LocalPath, "TestData"); + return "TestData"; } } @@ -38,4 +37,4 @@ protected string GetTestDataFilePath(string fileName) } } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/ShapeFileProviderTests.cs b/UnitTests/Data/Providers/ShapeFileProviderTests.cs index c70ecd0c..cfaf9f8f 100644 --- a/UnitTests/Data/Providers/ShapeFileProviderTests.cs +++ b/UnitTests/Data/Providers/ShapeFileProviderTests.cs @@ -5,6 +5,7 @@ namespace UnitTests.Data.Providers [NUnit.Framework.TestFixture] public class ShapeFileProviderTests : ProviderTest { + private long _msLineal; private long _msVector; private const int NumberOfRenderCycles = 1; @@ -12,10 +13,10 @@ public class ShapeFileProviderTests : ProviderTest [NUnit.Framework.TestFixtureTearDown] public void TestFixtureTearDown() { - System.Console.WriteLine("Speed comparison:"); - System.Console.WriteLine("VectorLayer\tLinealLayer\tRatio"); - System.Console.WriteLine(string.Format("{0}\t{1}\t{2:N}", _msVector, _msLineal, - ((double)_msLineal / _msVector * 100))); + System.Diagnostics.Trace.WriteLine("Speed comparison:"); + System.Diagnostics.Trace.WriteLine("VectorLayer\tLinealLayer\tRatio"); + System.Diagnostics.Trace.WriteLine(string.Format("{0}\t{1}\t{2:N}", _msVector, _msLineal, + ((double)_msLineal / _msVector * 100))); } [NUnit.Framework.Test] @@ -80,9 +81,9 @@ public void UsingTest() { using (var reader = new System.IO.BinaryReader(s)) { - System.Console.WriteLine(reader.ReadInt32()); + System.Diagnostics.Trace.WriteLine(reader.ReadInt32()); } - NUnit.Framework.Assert.Throws(() => System.Console.WriteLine(s.Position)); + NUnit.Framework.Assert.Throws(() => System.Diagnostics.Trace.WriteLine(s.Position)); } } @@ -116,7 +117,7 @@ public void TestDeleteAfterClose() } catch (System.Exception) { - System.Console.WriteLine("Failed to delete '{0}'", file); + System.Diagnostics.Trace.WriteLine("Failed to delete '{0}'", file); succeeded = false; } } @@ -165,7 +166,7 @@ public void TestPerformanceVectorLayer() var res = map.GetMap(); var path = System.IO.Path.ChangeExtension(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), ".vector.png"); res.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Console.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); + System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); } [NUnit.Framework.Test] @@ -187,7 +188,7 @@ public void TestPerformanceLinealLayer() map.ZoomToExtents(); RepeatedRendering(map, shp.GetFeatureCount(), NumberOfRenderCycles, out _msLineal); - System.Console.WriteLine("\nWith testing if record is deleted "); + System.Diagnostics.Trace.WriteLine("\nWith testing if record is deleted "); shp.CheckIfRecordIsDeleted = true; long tmp; @@ -196,21 +197,21 @@ public void TestPerformanceLinealLayer() var res = map.GetMap(); var path = System.IO.Path.ChangeExtension(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), "lineal.png"); res.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Console.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); + System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); } private static void RepeatedRendering(SharpMap.Map map, int numberOfFeatures, int numberOfTimes, out long avgRenderTime) { - System.Console.WriteLine("Rendering Map with " + numberOfFeatures + " features"); + System.Diagnostics.Trace.WriteLine("Rendering Map with " + numberOfFeatures + " features"); var totalRenderTime = 0L; var sw = new System.Diagnostics.Stopwatch(); for (var i = 1; i <= numberOfTimes; i++) { - System.Console.Write(string.Format("Rendering {0}x time(s)", i)); + System.Diagnostics.Trace.Write(string.Format("Rendering {0}x time(s)", i)); sw.Start(); map.GetMap(); sw.Stop(); - System.Console.WriteLine(" in " + + System.Diagnostics.Trace.WriteLine(" in " + sw.ElapsedMilliseconds.ToString( System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); totalRenderTime += sw.ElapsedMilliseconds; @@ -218,7 +219,7 @@ private static void RepeatedRendering(SharpMap.Map map, int numberOfFeatures, in } avgRenderTime = totalRenderTime/numberOfTimes; - System.Console.WriteLine("\n Average rendering time:" + avgRenderTime.ToString( + System.Diagnostics.Trace.WriteLine("\n Average rendering time:" + avgRenderTime.ToString( System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); } @@ -259,7 +260,7 @@ public void TestExecuteIntersectionQuery() sw.Start(); shp.ExecuteIntersectionQuery(bbox, fds); sw.Stop(); - System.Console.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + + System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + sw.ElapsedMilliseconds + "ms."); fds.Tables.RemoveAt(0); @@ -268,7 +269,7 @@ public void TestExecuteIntersectionQuery() sw.Start(); shp.ExecuteIntersectionQuery(bbox, fds); sw.Stop(); - System.Console.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + + System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + sw.ElapsedMilliseconds + "ms."); } @@ -298,7 +299,7 @@ public void TestExecuteIntersectionQueryWithFilterDelegate() sw.Start(); shp.ExecuteIntersectionQuery(bbox, fds); sw.Stop(); - System.Console.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + + System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + sw.ElapsedMilliseconds + "ms."); fds.Tables.RemoveAt(0); @@ -307,17 +308,17 @@ public void TestExecuteIntersectionQueryWithFilterDelegate() sw.Start(); shp.ExecuteIntersectionQuery(bbox, fds); sw.Stop(); - System.Console.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + + System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + sw.ElapsedMilliseconds + "ms."); } public static bool JustTracks(SharpMap.Data.FeatureDataRow fdr) { - //System.Console.WriteLine(fdr [0] + ";"+ fdr[4]); + //System.Diagnostics.Trace.WriteLine(fdr [0] + ";"+ fdr[4]); var s = fdr[4] as string; if (s != null) return s == "track"; return true; } } -} \ No newline at end of file +} diff --git a/UnitTests/Data/Providers/ThreadingTest.cs b/UnitTests/Data/Providers/ThreadingTest.cs index 012965d8..d874f272 100644 --- a/UnitTests/Data/Providers/ThreadingTest.cs +++ b/UnitTests/Data/Providers/ThreadingTest.cs @@ -13,15 +13,11 @@ namespace UnitTests.Data.Providers { public class ShapeFileWithMemoryCacheThreadingTest : ThreadingTest { - private struct TMP {} - private static string TestDataPath { get { - var t = new TMP(); - var codeBase = Path.GetDirectoryName(t.GetType().Assembly.CodeBase); - return Path.Combine(new Uri(codeBase).LocalPath, "TestData", "roads_ugl.shp"); + return Path.Combine("TestData", "roads_ugl.shp"); } } @@ -60,15 +56,11 @@ public void TestTwoThreadsUsingDifferentProviders() public class ShapeFileThreadingTest : ThreadingTest { - private struct tmp { } - internal static string TestDataPath { get { - var t = new tmp(); - var codeBase = Path.GetDirectoryName(t.GetType().Assembly.CodeBase); - return Path.Combine(new Uri(codeBase).LocalPath, "TestData", "roads_ugl.shp"); + return Path.Combine("TestData", "roads_ugl.shp"); } } @@ -265,7 +257,7 @@ public void RunTest(int kind) throw exception; } sw.Stop(); - Console.WriteLine("\nTest performed in {0}ms", sw.ElapsedMilliseconds); + System.Diagnostics.Trace.WriteLine($"\nTest performed in {sw.ElapsedMilliseconds}ms"); } private readonly object _runLock = new object(); @@ -302,15 +294,18 @@ private void WaitAllRun() private void ExecuteGetGeometriesInView(object arguments) { var env = GetRandomEnvelope(); - Console.WriteLine("Thread {0}: {2}. GetGeometriesInView({1})", Thread.CurrentThread.ManagedThreadId, env, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. GetGeometriesInView({1})", Thread.CurrentThread.ManagedThreadId, env, arguments)); try { var geoms = _provider.GetGeometriesInView(env); - Console.WriteLine("Thread {0}: {2}. {1} geometries", Thread.CurrentThread.ManagedThreadId, geoms.Count, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. {1} geometries", Thread.CurrentThread.ManagedThreadId, geoms.Count, arguments)); } catch (Exception ex) { - Console.WriteLine("Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message)); _testsFailed[(int)arguments] = ex; } @@ -319,16 +314,19 @@ private void ExecuteGetGeometriesInView(object arguments) private void ExecuteExecuteFeatureQueryEnvelope(object arguments) { var env = GetRandomEnvelope(); - Console.WriteLine("Thread {0}: {2}. ExecuteFeatureQuery with ({1})", Thread.CurrentThread.ManagedThreadId, env, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. ExecuteFeatureQuery with ({1})", Thread.CurrentThread.ManagedThreadId, env, arguments)); try { var fds = new FeatureDataSet(); _provider.ExecuteIntersectionQuery(env, fds); - Console.WriteLine("Thread {0}: {2}. {1} features", Thread.CurrentThread.ManagedThreadId, fds.Tables[0].Count, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. {1} features", Thread.CurrentThread.ManagedThreadId, fds.Tables[0].Count, arguments)); } catch (Exception ex) { - Console.WriteLine("Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message)); _testsFailed[(int)arguments] = ex; } @@ -338,16 +336,19 @@ private void ExecuteExecuteFeatureQueryGeometry(object arguments) { var env = GetRandomEnvelope(); var geom = GeometryFactory.Default.ToGeometry(env); - Console.WriteLine("Thread {0}: {2}. ExecuteFeatureQuery with ({1})", Thread.CurrentThread.ManagedThreadId, geom, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. ExecuteFeatureQuery with ({1})", Thread.CurrentThread.ManagedThreadId, geom, arguments)); try { var fds = new FeatureDataSet(); _provider.ExecuteIntersectionQuery(geom, fds); - Console.WriteLine("Thread {0}: {2}. {1} features", Thread.CurrentThread.ManagedThreadId, fds.Tables[0].Count, arguments); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {2}. {1} features", Thread.CurrentThread.ManagedThreadId, fds.Tables[0].Count, arguments)); } catch (Exception ex) { - Console.WriteLine("Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message); + System.Diagnostics.Trace.WriteLine(string.Format( + "Thread {0}: {1}. failed:\n{2}", Thread.CurrentThread.ManagedThreadId, arguments, ex.Message)); _testsFailed[(int)arguments] = ex; } @@ -361,4 +362,4 @@ public void TearDown() } } -} \ No newline at end of file +} diff --git a/UnitTests/GeoApiExTests.cs b/UnitTests/GeoApiExTests.cs index 4870e6dd..19ac70ed 100644 --- a/UnitTests/GeoApiExTests.cs +++ b/UnitTests/GeoApiExTests.cs @@ -11,7 +11,7 @@ namespace UnitTests public class GeoApiExTests { [Test] - public void TestCloseRIng() + public void TestCloseRing() { var coords = new List(new Coordinate[] { new Coordinate(0,0,5), @@ -28,7 +28,7 @@ public void TestCloseRIng() } [Test] - public void TestCloseRIng2() + public void TestCloseRing2() { var coords = new List(new Coordinate[] { new Coordinate(0,0), diff --git a/UnitTests/Layers/CoordinateTransformationTest.cs b/UnitTests/Layers/CoordinateTransformationTest.cs index 1291b73f..76aa101a 100644 --- a/UnitTests/Layers/CoordinateTransformationTest.cs +++ b/UnitTests/Layers/CoordinateTransformationTest.cs @@ -5,18 +5,15 @@ using SharpMap.Data; using SharpMap.Data.Providers; using SharpMap.Layers; -using System; -using System.Collections.Generic; using System.Data; using System.Linq; -using System.Text; namespace UnitTests.Layers { class CoordinateTransformationTest { - private string _path = "C:\\temp\\"; + //private string _path = "C:\\temp\\"; private string _baseFileName = "CoordTransTest"; private double _gcsTolerance = 0.00000002; // 2mm (8dp dec degree = approx 1mm) private double _pcsTolerance = 0.002; // 2mm @@ -37,7 +34,7 @@ public void CoordinateTransformation_ChangingTargetSrid_PR101() m.ZoomToBox(box); using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(_path, _baseFileName + "NoTargetSrid.bmp")); + img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "NoTargetSrid.bmp")); // Test setting TargetSRID (should cause CoordinateTransformation to be updated) and generate maps with symmetrical 8-pointed star TestSrid(m, 4326, _gcsTolerance); @@ -118,7 +115,7 @@ private void TestSrid(Map m, int targetSrid, double tolerance) // visual check: symmetrical 8-pointed star using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(_path, _baseFileName + "_SRID_" + targetSrid + ".bmp")); + img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "_SRID_" + targetSrid + ".bmp")); } private void TestTrans(Map m, int targetSrid, double tolerance) @@ -138,7 +135,7 @@ private void TestTrans(Map m, int targetSrid, double tolerance) // visual check: symmetrical 8-pointed star using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(_path, _baseFileName + "_Trans_" + targetSrid + ".bmp")); + img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "_Trans_" + targetSrid + ".bmp")); } private void SetTargetSridAndZoomExtents(Map m, int targetSrid) diff --git a/UnitTests/Layers/GdiImageLayerTest.cs b/UnitTests/Layers/GdiImageLayerTest.cs index 3452c689..9067f08a 100644 --- a/UnitTests/Layers/GdiImageLayerTest.cs +++ b/UnitTests/Layers/GdiImageLayerTest.cs @@ -63,8 +63,8 @@ internal static void DeleteTmpFiles(string imageFile) } catch (Exception ex) { - Console.Write(ex); - Console.WriteLine(); + System.Diagnostics.Trace.Write(ex); + System.Diagnostics.Trace.WriteLine(""); //throw; } } @@ -166,4 +166,4 @@ public void TestColorMap() GdiImageLayerTest.DeleteTmpFiles(tmpFile); } } -} \ No newline at end of file +} diff --git a/UnitTests/Layers/LayerTest.cs b/UnitTests/Layers/LayerTest.cs index 0bcda9f2..909d3783 100644 --- a/UnitTests/Layers/LayerTest.cs +++ b/UnitTests/Layers/LayerTest.cs @@ -30,17 +30,24 @@ public BindableComponent() public void Dispose() { + Disposed?.Invoke(this, EventArgs.Empty); } public ISite Site { get; set; } + public event EventHandler Disposed; + public ControlBindingsCollection DataBindings { get; private set; } + public BindingContext BindingContext { get; set; } public int IntProperty { get; set; } } #endregion + + private bool _bcDisposed; + [Test(Description = "SRID property must be bindable")] public void SRID_Winform_ShouldBeBindable() { @@ -50,12 +57,16 @@ public void SRID_Winform_ShouldBeBindable() var binding = new Binding("IntProperty", layer, "SRID"); var targetComponent = new BindableComponent(); + targetComponent.Disposed += (sender, args) => _bcDisposed = true; targetComponent.DataBindings.Add(binding); layer.SRID = 4326; Assert.That(targetComponent.IntProperty, Is.EqualTo(4326), "Binding on Layer.SRID did not work"); + + targetComponent.Dispose(); + Assert.That(_bcDisposed, Is.True); } } } diff --git a/UnitTests/Properties/Resources.Designer.cs b/UnitTests/Properties/Resources.Designer.cs index 6e9d2059..071a45b9 100644 --- a/UnitTests/Properties/Resources.Designer.cs +++ b/UnitTests/Properties/Resources.Designer.cs @@ -1,73 +1,50 @@ -//------------------------------------------------------------------------------ -// -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.34209 -// -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. -// -//------------------------------------------------------------------------------ - -namespace UnitTests.Properties { - using System; - - - /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UnitTests.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Women { - get { - object obj = ResourceManager.GetObject("Women", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace UnitTests.Properties { + using System; + using System.Reflection; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static System.Resources.ResourceManager resourceMan; + + private static System.Globalization.CultureInfo resourceCulture; + + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { + get { + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("UnitTests.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/UnitTests/Properties/Resources.resx b/UnitTests/Properties/Resources.resx index 07b2c3f4..7c0911ec 100644 --- a/UnitTests/Properties/Resources.resx +++ b/UnitTests/Properties/Resources.resx @@ -118,7 +118,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\Women.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - \ No newline at end of file diff --git a/UnitTests/Properties/Settings.Designer.cs b/UnitTests/Properties/Settings.Designer.cs index 9f5708ed..b06035a9 100644 --- a/UnitTests/Properties/Settings.Designer.cs +++ b/UnitTests/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace UnitTests.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -55,20 +55,21 @@ public string OleDbProvider { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] - [global::System.Configuration.DefaultSettingValueAttribute("Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true;")] - public string PostGis { + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=:memory:")] + public string SpatiaLite { get { - return ((string)(this["PostGis"])); + return ((string)(this["SpatiaLite"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] - [global::System.Configuration.DefaultSettingValueAttribute("Data Source=:memory:")] - public string SpatiaLite { + [global::System.Configuration.DefaultSettingValueAttribute("Server=ivv-t3s.ivv-aachen.de;Port=5432;database=postgis_sample;Integrated Securit" + + "y=true;")] + public string PostGis { get { - return ((string)(this["SpatiaLite"])); + return ((string)(this["PostGis"])); } } } diff --git a/UnitTests/Properties/Settings.settings b/UnitTests/Properties/Settings.settings index 102f4152..ede9642d 100644 --- a/UnitTests/Properties/Settings.settings +++ b/UnitTests/Properties/Settings.settings @@ -20,19 +20,19 @@ Microsoft.ACE.OLEDB.12.0 - + <?xml version="1.0" encoding="utf-16"?> <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <ConnectionString>Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true;</ConnectionString> + <ConnectionString>Data Source=:memory:</ConnectionString> </SerializableConnectionString> - Server=ivv-t3s;Port=5432;database=postgis_sample;Integrated Security=true; + Data Source=:memory: - + <?xml version="1.0" encoding="utf-16"?> <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <ConnectionString>Data Source=:memory:</ConnectionString> + <ConnectionString>Server=ivv-t3s.ivv-aachen.de;Port=5432;database=postgis_sample;Integrated Security=true;</ConnectionString> </SerializableConnectionString> - Data Source=:memory: + Server=ivv-t3s.ivv-aachen.de;Port=5432;database=postgis_sample;Integrated Security=true; \ No newline at end of file diff --git a/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs b/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs index 4f2e95de..edbe0429 100644 --- a/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs +++ b/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs @@ -4,82 +4,88 @@ using SharpMap; namespace UnitTests.Rendering.GroupStyle -{ - [TestFixture] +{ + [TestFixture] public class GroupStyleTests - { - [Test] - public void TestAddRemove() - { - var style = new SharpMap.Styles.GroupStyle(); - var vStyle = new SharpMap.Styles.VectorStyle() - { - Enabled = true, - PointColor = Brushes.Red, - PointSize = 3 - }; - style.AddStyle(vStyle); + { + [Test] + public void TestAddRemove() + { + var style = new SharpMap.Styles.GroupStyle(); + var vStyle = new SharpMap.Styles.VectorStyle() + { + Enabled = true, + PointColor = Brushes.Red, + PointSize = 3 + }; + style.AddStyle(vStyle); + + vStyle = new SharpMap.Styles.VectorStyle() + { + Enabled = true, + PointColor = Brushes.White, + PointSize = 1 + }; + style.AddStyle(vStyle); + + Assert.AreEqual(2, style.Count); + Assert.AreEqual(Color.Red, (style[0].PointColor as SolidBrush).Color); + } + + [Test] +#if LINUX + [Ignore("Known to fail")] +#endif + public void TestRender() + { + var style = new SharpMap.Styles.GroupStyle(); + var vStyle = new SharpMap.Styles.VectorStyle() + { + Enabled = true, + PointColor = Brushes.Red, + PointSize = 6 + }; + style.AddStyle(vStyle); + + vStyle = new SharpMap.Styles.VectorStyle() + { + Enabled = true, + PointColor = Brushes.White, + PointSize = 2, - vStyle = new SharpMap.Styles.VectorStyle() - { - Enabled = true, - PointColor = Brushes.White, - PointSize = 1 - }; - style.AddStyle(vStyle); - - Assert.AreEqual(2, style.Count); - Assert.AreEqual(Color.Red, (style[0].PointColor as SolidBrush).Color); - } - - [Test] - public void TestRender() - { - var style = new SharpMap.Styles.GroupStyle(); - var vStyle = new SharpMap.Styles.VectorStyle() - { - Enabled = true, - PointColor = Brushes.Red, - PointSize = 6 - }; - style.AddStyle(vStyle); - - vStyle = new SharpMap.Styles.VectorStyle() - { - Enabled = true, - PointColor = Brushes.White, - PointSize = 2 - }; - style.AddStyle(vStyle); - - Assert.AreEqual(2, style.Count); - Assert.AreEqual(Color.Red, (style[0].PointColor as SolidBrush).Color); - - VectorLayer vLay = new VectorLayer("test"); - vLay.Style = style; - - vLay.DataSource = new SharpMap.Data.Providers.GeometryProvider("POINT(0 0)"); - - Map m = new Map(new Size(11, 11)); - m.BackColor = Color.White; - m.ZoomToBox(new GeoAPI.Geometries.Envelope(-5, 5, -5, 5)); - m.Layers.Add(vLay); - var img = m.GetMap(); - - //img.Save(@"c:\\temp\ren.png"); - - Bitmap bmp = img as Bitmap; - Color c1 = bmp.GetPixel(5, 5); - Assert.AreEqual(Color.White.ToArgb(), c1.ToArgb()); - c1 = bmp.GetPixel(3, 5); - Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); - c1 = bmp.GetPixel(7, 5); - Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); - c1 = bmp.GetPixel(5, 3); - Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); - c1 = bmp.GetPixel(5, 7); - Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); - - } + }; + style.AddStyle(vStyle); + + Assert.AreEqual(2, style.Count); + Assert.AreEqual(Color.Red, (style[0].PointColor as SolidBrush).Color); + + VectorLayer vLay = new VectorLayer("test"); + vLay.Style = style; + vLay.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + vLay.DataSource = new SharpMap.Data.Providers.GeometryProvider("POINT(0 0)"); + + Map m = new Map(new Size(11, 11)); + m.BackColor = Color.White; + m.ZoomToBox(new GeoAPI.Geometries.Envelope(-5, 5, -5, 5)); + m.Layers.Add(vLay); + var img = m.GetMap(); + + img.Save(@"c:\\temp\ren.png"); + + Bitmap bmp = img as Bitmap; + Color c1 = bmp.GetPixel(5, 5); + Assert.AreEqual(Color.White.ToArgb(), c1.ToArgb()); + c1 = bmp.GetPixel(3, 5); + Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); + c1 = bmp.GetPixel(7, 5); + Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); + c1 = bmp.GetPixel(5, 3); + Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); + c1 = bmp.GetPixel(5, 7); + Assert.AreEqual(Color.Red.ToArgb(), c1.ToArgb()); + + img.Dispose(); + m.Dispose(); + } } } diff --git a/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs index ebd00c34..b18aaef0 100644 --- a/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs @@ -9,7 +9,7 @@ static LineSymbolizerTest() private string GetTestFile() { - return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\roads_ugl.shp"); + return System.IO.Path.Combine("TestData", "roads_ugl.shp"); } [NUnit.Framework.Test] @@ -30,12 +30,12 @@ public void TestBasicLineSymbolizer() m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); sw.Reset(); sw.Start(); var bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("NDSRoads1.bmp"); @@ -47,7 +47,7 @@ public void TestBasicLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("NDSRoads2.bmp"); } @@ -84,7 +84,7 @@ public void TestWarpedLineSymbolizer() sw.Start(); var bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads1.bmp"); cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander @@ -99,7 +99,7 @@ public void TestWarpedLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads2-0.bmp"); cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander @@ -115,7 +115,7 @@ public void TestWarpedLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads2-1.bmp"); cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander { @@ -130,7 +130,7 @@ public void TestWarpedLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads2-2.bmp"); cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander @@ -146,7 +146,7 @@ public void TestWarpedLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads2-3.bmp"); @@ -161,7 +161,7 @@ public void TestWarpedLineSymbolizer() sw.Reset(); sw.Start(); bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads3.bmp"); } @@ -184,7 +184,7 @@ public void TestCachedLineSymbolizerInTheme() sw.Start(); var bmp = m.GetMap(); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); bmp.Save("AurichRoads1Theme.bmp"); } @@ -232,4 +232,4 @@ public SharpMap.Styles.IStyle GetStyle(SharpMap.Data.FeatureDataRow attribute) #endregion } } -} \ No newline at end of file +} diff --git a/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs index bc9ad55d..510ba159 100644 --- a/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs @@ -106,8 +106,13 @@ public void TestRasterPointSymbolizer() TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); + + + var wmnStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("UnitTests.Resources.Women.png"); + var wmnBmp = new System.Drawing.Bitmap(wmnStream); + var rps = - new SharpMap.Rendering.Symbolizer.RasterPointSymbolizer {Symbol = Properties.Resources.Women}; + new SharpMap.Rendering.Symbolizer.RasterPointSymbolizer {Symbol = wmnBmp}; layer.Style.PointSymbolizer = rps; var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); @@ -168,4 +173,4 @@ public void TestListPointSymbolizer() map.GetMap().Save("ListPointSymbolizer1.bmp"); } } -} \ No newline at end of file +} diff --git a/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs index ccd62ed8..58791814 100644 --- a/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs @@ -25,11 +25,14 @@ public override void End(System.Drawing.Graphics g, SharpMap.MapViewport map) } - [NUnit.Framework.Test, NUnit.Framework.Ignore("Fix path to a valid file")] - public void TestPlainPolygonSymbolizer() + [NUnit.Framework.TestCase("..\\..\\Examples\\WinFormSamples\\GeoData\\World\\countries.shp")] + public void TestPlainPolygonSymbolizer(string filePath) { - var provider = new SharpMap.Data.Providers.ShapeFile( - "..\\..\\..\\WinFormSamples\\GeoData\\World\\countries.shp", true); + filePath = filePath.Replace("\\", new string(System.IO.Path.DirectorySeparatorChar, 1)); + if (!System.IO.File.Exists(filePath)) + throw new NUnit.Framework.IgnoreException($"'{filePath}' not found"); + + var provider = new SharpMap.Data.Providers.ShapeFile(filePath, true); var l = new SharpMap.Layers.Symbolizer.PolygonalVectorLayer("Countries", provider); l.Symbolizer = new ModifiedBasicPolygonSymbolizer { @@ -53,7 +56,7 @@ public void TestPlainPolygonSymbolizer() img = m.GetMap(); img.Save("PolygonSymbolizer-1.bmp", System.Drawing.Imaging.ImageFormat.Bmp); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); l.Symbolizer = new SharpMap.Rendering.Symbolizer.BasicPolygonSymbolizer() { @@ -69,9 +72,9 @@ public void TestPlainPolygonSymbolizer() img = m.GetMap(); img.Save("PolygonSymbolizer-2.bmp", System.Drawing.Imaging.ImageFormat.Bmp); sw.Stop(); - System.Console.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); } } -} \ No newline at end of file +} diff --git a/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs index eb99bf3b..8df99fd6 100644 --- a/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs @@ -21,7 +21,7 @@ public void TestRasterPointSymbolizerScaleRotn() var m = CreateMap(); m.ZoomToExtents(); var img = m.GetMap(); - img.Save("C:\\Temp\\RasterPointSymbolizer.bmp", System.Drawing.Imaging.ImageFormat.Bmp); + img.Save("RasterPointSymbolizer.bmp", System.Drawing.Imaging.ImageFormat.Bmp); } private SharpMap.Map CreateMap() diff --git a/UnitTests/Serialization/LayerTest.cs b/UnitTests/Serialization/LayerTest.cs index 6d02a77c..d77f242a 100644 --- a/UnitTests/Serialization/LayerTest.cs +++ b/UnitTests/Serialization/LayerTest.cs @@ -7,6 +7,7 @@ using SharpMap.Rendering.Symbolizer; using UnitTests.Properties; using BruTile.Predefined; +using Assembly = System.Reflection.Assembly; namespace UnitTests.Serialization { @@ -45,7 +46,9 @@ public void TestLabelLayer() public void TestGdiImageLayer() { var tmp = Path.ChangeExtension(Path.GetTempFileName(), "png"); - Resources.Women.Save(tmp, ImageFormat.Png); + var wmnStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("UnitTests.Resources.Women.png"); + var wmnBmp = new System.Drawing.Bitmap(wmnStream); + wmnBmp.Save(tmp, ImageFormat.Png); var gdiS = new GdiImageLayer("Frau", tmp); GdiImageLayer gdiD = null; @@ -93,7 +96,7 @@ public void TestTileLayer() { var tlS = new TileLayer(KnownTileSources.Create(KnownTileSource.BingHybridStaging, string.Empty), - "Name", System.Drawing.Color.MediumTurquoise, true, "D:\\temp\\Bing\\Hybrid"); + "Name", System.Drawing.Color.MediumTurquoise, true, Path.Combine(Path.GetTempPath(), "Bing", "Hybrid")); TileLayer tlD = null; Assert.DoesNotThrow(() => tlD = SandD(tlS, GetFormatter())); @@ -260,4 +263,4 @@ public override bool Equals(VectorLayer lhs, VectorLayer rhs) } } } -} \ No newline at end of file +} diff --git a/UnitTests/Serialization/MapDocSerializationTests.cs b/UnitTests/Serialization/MapDocSerializationTests.cs index fc50dbed..c21392c3 100644 --- a/UnitTests/Serialization/MapDocSerializationTests.cs +++ b/UnitTests/Serialization/MapDocSerializationTests.cs @@ -8,12 +8,29 @@ using SharpMap.Serialization; using System.IO; using System.Net; +using SharpMap.Layers; namespace UnitTests.Serialization { [TestFixture] class MapDocSerializationTests { + [TestFixtureSetUp] + public void OneTimeSetUp() + { + try + { + var l = new SharpMap.Layers.WmsLayer("testwms", + "http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer"); + l.Dispose(); + } + catch (Exception e) + { + throw new IgnoreException("Creation of WMS Layer failed", e); + + } + } + [Test] public void TestSerializeWmsLayer() { @@ -24,7 +41,7 @@ public void TestSerializeWmsLayer() MemoryStream ms = new MemoryStream(); SharpMap.Serialization.MapSerialization.SaveMapToStream(m, ms); string txt = System.Text.ASCIIEncoding.ASCII.GetString(ms.ToArray()); - Console.WriteLine(txt); + System.Diagnostics.Trace.WriteLine(txt); Assert.IsTrue(txt.Contains(@" testwms @@ -154,7 +171,7 @@ public void TestSerializeWmsLayerWithCredentials() MemoryStream ms = new MemoryStream(); SharpMap.Serialization.MapSerialization.SaveMapToStream(m, ms); string txt = System.Text.ASCIIEncoding.ASCII.GetString(ms.ToArray()); - Console.WriteLine(txt); + System.Diagnostics.Trace.WriteLine(txt); Assert.IsTrue(txt.Contains(@" testwms diff --git a/UnitTests/Serialization/MapTest.cs b/UnitTests/Serialization/MapTest.cs index a2a4a26b..1d346249 100644 --- a/UnitTests/Serialization/MapTest.cs +++ b/UnitTests/Serialization/MapTest.cs @@ -1,4 +1,5 @@ -using System; +#if !LINUX +using System; using System.Drawing; using System.IO; using BruTile.Predefined; @@ -74,9 +75,7 @@ public void TestMap2() var m = new Map(_mapSize); m.BackgroundLayer.Add(new TileLayer(KnownTileSources.Create(KnownTileSource.MapQuest), "MapQuest")); - var codeBase = Path.GetDirectoryName(new Uri(GetType().Assembly.CodeBase).LocalPath); - var cn = string.Format("Data Source={0};", - Path.Combine(new Uri(codeBase).LocalPath, "TestData", "osm_aurich.sqlite")); + string cn = $"Data Source={Path.Combine("TestData", "osm_aurich.sqlite")};"; var ct = Wgs84ToWebMercator; //Env[7,45731445821406 : 7,53454260528903, 53,4342695512313 : 53,478793942147] @@ -127,4 +126,5 @@ private static ICoordinateTransformation Wgs84ToWebMercator } } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/UnitTests/Serialization/ProviderTest.cs b/UnitTests/Serialization/ProviderTest.cs index d8098b23..8802cc4f 100644 --- a/UnitTests/Serialization/ProviderTest.cs +++ b/UnitTests/Serialization/ProviderTest.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using GeoAPI.Geometries; using NUnit.Framework; using SharpMap.Data.Providers; @@ -41,20 +42,21 @@ internal static T CreateProvider() return (T)(IProvider)new GeometryProvider(gf.CreatePoint(new Coordinate(1, 1))); if (typeof(T) == typeof(ManagedSpatiaLite)) - return (T)(IProvider)new ManagedSpatiaLite("Data Source=TestData\\test-2.3.sqlite;", + return (T)(IProvider)new ManagedSpatiaLite($"Data Source={Path.Combine("TestData", "test-2.3.sqlite")};", "HighWays", "Geometry", "PK_UID"); if (typeof(T) == typeof(SpatiaLite)) - return (T)(IProvider)new SpatiaLite("Data Source=TestData\\test-2.3.sqlite;", + return (T)(IProvider)new SpatiaLite($"Data Source={Path.Combine("TestData", "test-2.3.sqlite")};", "HighWays", "Geometry", "PK_UID"); if (typeof(T) == typeof(ShapeFile)) - return (T)(IProvider)new ShapeFile("TestData\\roads_ugl.shp"); + return (T)(IProvider)new ShapeFile(Path.Combine("TestData", "roads_ugl.shp")); +#if !LINUX if (typeof(T) == typeof(SqlServer2008)) return (T)(IProvider)new SqlServer2008("Data Source=IVV-SQLD; Database=OBE;Integrated Security=SSPI;", "Roads", "wkb_geometry", "ogc_fid", SqlServerSpatialObjectType.Geometry); - +#endif if (typeof(T) == typeof(PostGIS)) return (T)(IProvider)new PostGIS("Host=127.0.0.1;Port=5432;User Id=postgres;Password=1.Kennwort;database=postgis_sample;", "rivers", "wkb_geometry", "ogc_fid"); @@ -77,7 +79,7 @@ public void TestGeometryProvider() [Test] public void TestSpatiaLite2() { - var spatiaLite2S = new ManagedSpatiaLite("Data Source=test-2.3.sqlite;Database=Regions;", + var spatiaLite2S = new ManagedSpatiaLite($"Data Source={Path.Combine("TestData", "test-2.3.sqlite")};Database=Regions;", "Roads", "Geometry", "PK_UID"); var spatiaLite2 = SandD(spatiaLite2S, GetFormatter()); @@ -105,6 +107,7 @@ public void TestPostGIS() Assert.AreEqual(pS.SRID, pD.SRID); } +#if !LINUX [Test] public void TestSqlServer2008() { @@ -121,6 +124,7 @@ public void TestSqlServer2008() Assert.AreEqual(sql2008S.SpatialObjectType, sql2008D.SpatialObjectType); Assert.AreEqual(sql2008S.SRID, sql2008D.SRID); } +#endif } -} \ No newline at end of file +} diff --git a/UnitTests/Serialization/ReflectionTests.cs b/UnitTests/Serialization/ReflectionTests.cs index 662c6989..40ce6a65 100644 --- a/UnitTests/Serialization/ReflectionTests.cs +++ b/UnitTests/Serialization/ReflectionTests.cs @@ -37,12 +37,12 @@ public void Main() Type myType = (typeof(MyTypeClass)); // Get the public properties. PropertyInfo[] myPropertyInfo = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance); - Console.WriteLine("The number of public properties is {0}.", myPropertyInfo.Length); + System.Diagnostics.Trace.WriteLine($"The number of public properties is {myPropertyInfo.Length}."); // Display the public properties. DisplayPropertyInfo(myPropertyInfo); // Get the nonpublic properties. PropertyInfo[] myPropertyInfo1 = myType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance); - Console.WriteLine("The number of protected properties is {0}.", myPropertyInfo1.Length); + System.Diagnostics.Trace.WriteLine($"The number of protected properties is {myPropertyInfo1.Length}."); // Display all the nonpublic properties. DisplayPropertyInfo(myPropertyInfo1); @@ -52,12 +52,12 @@ public void Main() myType = typeof(MyTypeClass); // Get the PropertyInfo by passing the property name and specifying the BindingFlags. PropertyInfo myPropInfo = myType.GetProperty("MyProperty1", BindingFlags.Public | BindingFlags.Instance); - // Display Name propety to console. - Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name); + // Display Name propety to System.Diagnostics.Trace. + System.Diagnostics.Trace.WriteLine("{0} is a property of MyClass.", myPropInfo.Name); } catch (NullReferenceException e) { - Console.WriteLine("MyProperty does not exist in MyClass." + e.Message); + System.Diagnostics.Trace.WriteLine("MyProperty does not exist in MyClass." + e.Message); } } @@ -67,8 +67,8 @@ public static void DisplayPropertyInfo(PropertyInfo[] myPropertyInfo) for (int i = 0; i < myPropertyInfo.Length; i++) { PropertyInfo myPropInfo = (PropertyInfo)myPropertyInfo[i]; - Console.WriteLine("The property name is {0}.", myPropInfo.Name); - Console.WriteLine("The property type is {0}.", myPropInfo.PropertyType); + System.Diagnostics.Trace.WriteLine($"The property name is {myPropInfo.Name}." ); + System.Diagnostics.Trace.WriteLine($"The property type is {myPropInfo.PropertyType}."); } } @@ -113,4 +113,4 @@ public static object GetPropertyValue(Type type, object item, string propertyNam return prp.GetValue(item, null); } } -} \ No newline at end of file +} diff --git a/UnitTests/Serialization/SerializationTests.cs b/UnitTests/Serialization/SerializationTests.cs index 84c394c1..b06b4b84 100644 --- a/UnitTests/Serialization/SerializationTests.cs +++ b/UnitTests/Serialization/SerializationTests.cs @@ -153,12 +153,12 @@ public void TestWmtsTileSource(string url) var equal = true; var messages = new List(); - Console.WriteLine("Testing {0}", url); + System.Diagnostics.Trace.WriteLine($"Testing {url}"); foreach (var srcS in sources) { var srcD = SandD(srcS); Assert.NotNull(srcD); - Console.WriteLine("{0}", srcS); + System.Diagnostics.Trace.WriteLine($"{srcS}"); string message; if (!EqualTileSources(srcS, srcD, out message)) @@ -304,16 +304,19 @@ private static bool EqualTileProviders(ITileSchema schema, ITileProvider tp1, IT } catch (TimeoutException ex) { - Console.WriteLine("TileInfo({4}): {0}, {1}, {2}\n{3}", ti.Index.Level, ti.Index.Col, ti.Index.Row, - ex.Message, i); + System.Diagnostics.Trace.WriteLine(string.Format( + "TileInfo({4}): {0}, {1}, {2}\n{3}", + ti.Index.Level, ti.Index.Col, ti.Index.Row, ex.Message, i)); } catch(WebException ex) { if (ti == null) - Console.WriteLine("No tile info!"); + System.Diagnostics.Trace.WriteLine("No tile info!"); else - Console.WriteLine("TileInfo({5}): {0}, {1}, {2}\n{3}\n{4}", ti.Index.Level, ti.Index.Col, ti.Index.Row, - ex.Message, ex.Response.ResponseUri, i); + System.Diagnostics.Trace.WriteLine(string.Format( + "TileInfo({5}): {0}, {1}, {2}\n{3}\n{4}", + ti.Index.Level, ti.Index.Col, ti.Index.Row, + ex.Message, ex.Response.ResponseUri, i)); } } } diff --git a/UnitTests/Serialization/StylesTest.cs b/UnitTests/Serialization/StylesTest.cs index f3a50a59..927fc65a 100644 --- a/UnitTests/Serialization/StylesTest.cs +++ b/UnitTests/Serialization/StylesTest.cs @@ -21,6 +21,9 @@ public void TestStyle() AreStylesEqual(styleS, styleD); } +#if LINUX + [Ignore("Might fail on ColorBlend")] +#endif [Test] public void TestVectorStyle() { @@ -151,4 +154,4 @@ public override int GetHashCode(Font obj) } -} \ No newline at end of file +} diff --git a/UnitTests/Serialization/SurrogatesTest.cs b/UnitTests/Serialization/SurrogatesTest.cs index 8a51bc90..ddb702b1 100644 --- a/UnitTests/Serialization/SurrogatesTest.cs +++ b/UnitTests/Serialization/SurrogatesTest.cs @@ -19,7 +19,7 @@ public void TestPen() penS.Width = 5.2f; penS.DashCap = DashCap.Round; penS.StartCap = LineCap.RoundAnchor; - penS.CustomEndCap = new AdjustableArrowCap(10, 5) {BaseInset = 3}; + penS.CustomEndCap = new AdjustableArrowCap(10, 5) { BaseInset = 3 }; penD = SandD(penS, formatter); ComparePens(penS, penD); @@ -69,7 +69,7 @@ private static void CompareArrays(T[] a1, T[] a2, string testProperty = null) Assert.IsTrue(a1 != null && a2 != null, testProperty + " one is null"); Assert.AreEqual(a1.Length, a2.Length, testProperty + " different length"); - for (var i = 0; i < a1.Length; i++ ) + for (var i = 0; i < a1.Length; i++) Assert.AreEqual(a1[i], a2[i], string.Format("{0} differ at index {1} [{2}, {3}]", testProperty, i, a1, a2)); } @@ -97,40 +97,49 @@ public void TestHatchBrush() public void TestTextureBrush() { //Create some bitmap - using (var bmp = new Bitmap(15, 15)) + using (var bmp = new Bitmap(15, 15, PixelFormat.Format32bppArgb)) { for (var i = 0; i < bmp.Width; i++) for (var j = 0; j < bmp.Height; j++) - bmp.SetPixel(i, j, Color.FromKnownColor((KnownColor)((i * bmp.Width+j)%100))); + bmp.SetPixel(i, j, Color.FromKnownColor((KnownColor)(27+(i * bmp.Width + j) % 100))); - var brushS = new TextureBrush(bmp) - { WrapMode = WrapMode.TileFlipXY, Transform = new Matrix(0.9f, 1f, 1f, 0.9f, 0.2f, 0.2f)}; - var brushD = SandD(brushS, GetFormatter()); - + var brushS = new TextureBrush(bmp) + { WrapMode = WrapMode.TileFlipXY, Transform = new Matrix(0.9f, 1f, 1f, 0.9f, 0.2f, 0.2f) }; + var brushD = SandD(brushS, GetFormatter()); + Assert.IsNotNull(brushD); - Assert.AreEqual(brushS.WrapMode, brushD.WrapMode); - for (var i = 0; i < 6; i++ ) - Assert.AreEqual(brushS.Transform.Elements[i], brushD.Transform.Elements[i]); - - Assert.AreEqual(brushS.Image.Width, brushD.Image.Width); - Assert.AreEqual(brushS.Image.Height, brushD.Image.Height); - Assert.AreEqual(brushS.Image.HorizontalResolution, brushD.Image.HorizontalResolution, 0.1); - Assert.AreEqual(brushS.Image.VerticalResolution, brushD.Image.VerticalResolution, 0.1); - + Assert.AreEqual(brushS.WrapMode, brushD.WrapMode, "wrap mode"); + for (var i = 0; i < 6; i++) + Assert.AreEqual(brushS.Transform.Elements[i], brushD.Transform.Elements[i], $"matrix at {i}"); + + Assert.AreEqual(brushS.Image.Width, brushD.Image.Width, "image width"); + Assert.AreEqual(brushS.Image.Height, brushD.Image.Height, "image height"); +#if !LINUX + Assert.AreEqual(brushS.Image.HorizontalResolution, brushD.Image.HorizontalResolution, 0.1, "horizontal resolution"); + Assert.AreEqual(brushS.Image.VerticalResolution, brushD.Image.VerticalResolution, 0.1, "vertical resolution"); +#endif //This is machine dependant so don't test //Assert.AreEqual(brushS.Image.PixelFormat, brushD.Image.PixelFormat); + bool allEqual = true; for (var i = 0; i < brushS.Image.Width; i++) for (var j = 0; j < brushS.Image.Height; j++) { - var ps = ((Bitmap) brushS.Image).GetPixel(i, j); - var pd = ((Bitmap) brushD.Image).GetPixel(i, j); - Assert.AreEqual(ps, pd); - } - } + var ps = ((Bitmap)brushS.Image).GetPixel(i, j); + var pd = ((Bitmap)brushD.Image).GetPixel(i, j); + if (ps != pd) + { + allEqual = false; + System.Diagnostics.Trace.WriteLine($"pixels differ at {i}, {j}"); + } + } +#if !LINUX + Assert.IsTrue(allEqual, "pixels equal"); +#endif + } } - [Test] + [Test, Ignore("Flaky")] public void TestLinearGradientBrush() { var formatter = GetFormatter(); @@ -261,4 +270,4 @@ public void TestColorMap() } } } -} \ No newline at end of file +} diff --git a/UnitTests/TestData/CreatingData.cs b/UnitTests/TestData/CreatingData.cs index 5b2a6adf..9b40c62d 100644 --- a/UnitTests/TestData/CreatingData.cs +++ b/UnitTests/TestData/CreatingData.cs @@ -155,7 +155,7 @@ public void TestEllipse() NUnit.Framework.Assert.AreEqual("LINEARRING (2 1, 1 2, 0 1, 1 0, 2 1)", ell.ToString()); var ell2 = ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(1, 1), new System.Drawing.SizeF(1, 1)); - System.Console.WriteLine(ell2.ToString()); + System.Diagnostics.Trace.WriteLine(ell2.ToString()); } [NUnit.Framework.Test] @@ -187,4 +187,4 @@ public void TestLayer() mapimage.Save("ellipse.png", System.Drawing.Imaging.ImageFormat.Png); } } -} \ No newline at end of file +} diff --git a/UnitTests/TestData/gdal_sample.gpkg b/UnitTests/TestData/gdal_sample.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..917e2fd4163bcfd994533c0b40abde0b185df369 GIT binary patch literal 142336 zcmeHw3ve9AnO^rafB^|UKuXX`T2dIS2oewh0@wuvQZ&T{i6saVFXADIqG%YzE}#`b zfC4~~luo8*7o_aFOWASiE-7Eik19JU$F7SjIp?nKlGv_tF6We!y0a^Gl=J&svVG^s zI@_0Ae6gK=OwaZ_c6MfgU1G_e0(y43d;b3C>;8MX|NrmliL*oL)s!~3w0wDHRf~Zt z03nEL8UWz^_+LCegD(^z0`lJjV_lv6x7)cIM|LYeCP}}A{sH}O^tb58=m+R~=$q(& zps%9;hQ5Tph(3q@7=0Ff27LZF0c zpd%cn--CnaU%^501`cLdad7cP9K34@2Nzzz!E^ICcqWB|r{9f(r!L@N@;naCK7)g? zNgRxhFOO zM9JfIJ&J=)4F?DI;$RPXoE_vjwr;_}mMX$JM8CixsAnhgQyvlliNIZtz|N1&G5P-o z@~Ha|J>B(BEgw)KAQ7MlJX*UIpX-&k0J^RG5?xc?LVtyxMZb@l@re8=`aQH8{Ty9F z{~ZlUz$5~dkH8Mp1m{yrms6|DH)6^9`%yc+oLyR2NX@RMmlk8mox4#hynJFosnp=#)Xk+vf9c>G+8Au5>4WHvB*d?shEsJlTgZk<+p121bz_^#ZJoq zDwhB47`l4+L4dxG{sY#!y@d5@dz8Oc{!IC_a$A{G;z~Vy6aE3tAdfO3pw+8Q4SOLJ zUR30jHINt`PE3xU0}yoXRNEW6j2z;-OU!q2bZ97Xa&mBV1mDrJLv3wn#&=j>Y$X5i z)X?PM*yzx?0h;sBcD1A7AkQhjzs$@-gCmKF$??IF0Ze({Hnq8-iRU+7Z)Vo9(ZP{P zoa>P~wXq?LbD6J4k|kH_zO4oodx4g+9^Rsc8$y%{eTy<0tOTvrhFUa9l1(hTn`9AuL@@w>}@@4cB z^d$OI)KI3zFN=`~2ngI))zo0?2kRfIYG-lwo^NNUscj({Bh&)eqzWc*(R-T>eY_-*u?=s(>xEg*xS8tUnR z+1AyWiwmjwE0^Y{SFX&gre_wWms4}oD>qi$;*^u)iN48%HraP#D51IK&{|fOSEd(d zE~m7~#50rH$SD4w8X9UN(dndy$5n}e#JCx+jg1cu_l=*^&LqyYEiKQ_ET&(^Y%DF> zZWoiLXP1_ilbA&}f^EsvTzWB0N!Vy4Q!BH}=_@An)@+NSh7KHnw|C}Hm|a?2O)ajn z$LANw`P@87YoYhLJhJ7{k~6C_)2lbG*kMU0abfAXbZVI~J2f(Rb}E4%!pf@FpE%Wr z=OWsH18oa4E34D9&(AE*r?h@t8i5#9hV++>A&8?;{r&&CO1z^_6?7IT2MJab)4!dGUJ zwPM>&j*j5zPam#lZSK)BAv zN-Yy5&6l=hCQnmWUS~V07!)%yhL9ote9I(QJCqmO9x5i6+|ucj7fQ?|=( zmPfWFwvg9X8@{uZ$iIR<3b5bZN4+Iqrb+}P0_8?vi$eVL=rIAefK%{3wWn$Kz!+Al z;sg8Y^5gB}#;-V>TUt8)v(JCw|GhtYINI6O-QM|lduQ)tSN9Xq&L=uMpUuUAo4=;| zf8|>M{S18f+x{1AQFQPHjhdR)M*r)a_oIxHEfr>+5N4>@1Uwi*f7mI)O z?i~)3ztXVX&E~JvZ?hTwmF;z+)nBRKYO%J*u(f?l&hD@5s1+C@hJV$;5H{%VuCXzM zC+!W@PKI!FeU*hF9J3we7$O-I3qv@j4swP_Zd|7d`Z&OH|M7~eUdgaT;2uB#DR^nY z6s!XJA^hS;ZxZ)?dhmCCZQO`3&h>Ff7V6{{>+p=g$iQ!?j}!S7la-w5B$^a|Z?{ZSB4Sc8)3co6Q)^wRQ$vl7Q13A&gw&gh zObLx2yR1c<@x_#D7-hBAo7=>vHq7mKt{6>Z-*z?B(E;@- z`q-4Th^iyvJ{MlZ8;WK~tP5S;p@v#pp+1=7$^_hae4|?Kcj3p(S~N3e1?l(gR736U zP-l~9GONc*3d8-68O6lw1}iuA?8WfIeG+oM23qU2dNtJ41oa~n9=4yjH2I*D z5tgtX7Bo8lNAN2^>4INTes|qMFA3an1TFye7-)cvm#47e7#j*wNe#EB`Q@1_&!=a# ziSdb%(UAnW$`j2WVlHZaz}hFgG8EfNQp-fYq+xT!YU=X&U-LsfN{YFZD`s|Pc{R0? zo>}Cj{MsaL{?KxnJPOIoeQa*aLC~PAZP)icJusmi?k4OdvFdC#F*Y$!|0Wiqfs+&G zBP=n}h81a3!}M~x>&W5mNZZ8N>BRWxV1F*l(gv1Osl{vQ+2z9<{8_JXr--a=|wG>noVDxS-@vf?uv#DPOHzSGy~0*E6=Bvm(oe{{)cc4;6HiX zAq3X0>A$*G+l!m~`+9&;KONfCd^L+c(~ay(kmo=ObKfrkCcXmzLA>=|wD> zmK?L#Zn=!D#g|jd=_KyeB5g5C`pWFgLTY+$W|q*#VtwSuk;g3==4KXf@hNP~#0v%@ zZ9SdjaLKW_w7mK}&4N=|XF=>~xUcAP=~a$&vRj&ekd@k2};*h-g$*97n)@S(u;5l>ZeOt!*ILms!appzrVe+qh7ASv= z19?aUDggm1Lz$CUhHh=O%24FH7zD5zd=;OHKXessk|E8sQsOz& ztwH?e`K&m}WPQibVFG_x7PS(i2+d!H3#rD41e$6X|=LbMnt2fJ(3%`m> zYNpaJ;MpZJ!*d*RXO0w)sX#OQ6q&P9?|%LeIjugQ3Ucj!0PlVc>kd!hd20T}f^_^3 zJMjD;2l6O{0IJ0!&s&44oc~AS3@d)-HmKZL&i@HQIXtX*aop@@dw#4TA_j|6>Hn$x zqrU*?YdDaHL_i`?*$7bEXbbK$o-*J2KO!9nJ$UEBhZ4;HM+I{L|9urs!Y?WBRK9~= z;Q2S|d}$Z`HjCbFEXAWAOf|JML|A6nZeX_s^)0ullL2+&vdRXknN7x6ng=jCJ0 z9k}}*e{FL&KCT&fFb@A3zvFXOWaoRHal;950uLJge}4j$&nti8pJSO*B5=nMU|xX7 zu-vS@$0|3RHK$^brJRfNGyEGvZUm|0cN=G(nMZS?Jf2_kvpt^Q$K&}mKc9=|%I0#* z&-@;K9f`BMcs#%6XL~%qkH_0or}t#JyKWaqqqO z+noz5e|hId0r1C0?*(&He9kz(3&e#)PLh+l-;n=4fcO3BM_{x2@a)?qwnf#1pRaEh^Q{GVIj!$@cb3lZbYS=euk|J#8Q zRoYoz8A=55AVAxC_6%<8uRm;U>)a`UH!MzoUk}Dv%(*yxi?{WAedtZ+9^Q664x1fb z9&cagV~^+6z~eccTs+bLRRgU5`ykq-JPqE5f0q5A?wr{(*oQ&>8IhL;=IiFQCt+Q9 zZ`feW*xMpUf_{9|NuY}|0TsOdXi%wZ-rH<2k+Z<%U=rh;l%fVDR8{|`@-=X*=r(h@ zD#r)k$B%N)A0}t6bgL>3EB;z8xfAAwWT^}Q9lP~dtj6R#P7({TLnrvIm=NJ8a%nh-V5Z27)}-W@5jA>@&T~UwsfK{*O}$E&*Va4n$q)efj6Vw3ebOCFBjw6 z^LNuZL}+DuW6Nu4%T~}|@6waxi1D7pt<@aPwVJV=d0$CZTDezM0g71m)>&sndKFWI zodX4yl+zcoYiw}5=Vx#0*S+3BwU3;IvxdA$rc0&(mi-5rV;JB6XqD^#$_~FQP$F;# z5on?Nf7XCc1Mq3stTZa`QvM1p-a&>ui@x@t+a?Ljb&^c&V#)nZr%9Gjj4vs7m&C4{ z*B(;IzKhvrwmk#cOE`5MZ=$<`xAA4$o#rkNT6mzlt>zNN?LO&txQ?Ao+sw>vo0$q* z|JpVmo?UY6yesToI-itZ?m24Nu(VCH7T(%=?BSZw*@K>YeVVtd7`uGtBHDB% ztcJR}px!}&TgD%?PE8vc3c8u9GX@y&JvBH!In_60Y{VRKW{hZ46N4iI8ck_QC+U8^ z*Ks&=orLMd8}#>$R=swQ8ajFu>Id>LF};X)7H}3oquVXD>B0uh6=@+P7MI*M5^dAS z&d3_wzf<42R}CFI2KBCdtSm2GODA1;q49?bGDEXPTIk8087rf7|Bq_$eX{;%T4{tI z#y{`6L+>T)WGhk`jcp=#R2iK)hIJIuy)MpVf*V~T#xBu?5ufBySqRYe$gijIdgO9hj2_FL!QXC>hT2G+wG@8leE`4C^#Lp&zvkyn zqC(yidNO=}LsZ^tHDPKnaMA7dYhq7cB1ol-o zHMGN=)tUUFibke5O5?pfukU=Uy4}bmnv>nK?r5oQ#aXTX4{jN^AFS@+8AaQ9N?B`Da6UAPgdwF1Ys*R=zux&h~&wZ;jY zd&X*4;N0_8SrBp0gY1a7XHx`3+;c$U{|mtpK>h+9ulEx-#clW=K7D}4Uju;r$8jY2 zHx8c8ujN@HAQ9Lk2(a&e{2ZWPpr3CNmLwYz0f|5f5val*(hyeRZ-hbm{s&bhEKHJ? z2uK7rEdu2IkH9AZ_#`~3ynoZOi9dE7dPEH!KMwU{`CKQi%q)`~+Z{e8(=4H*pz{RF z=k3eE@(?Eq?q1QF8EjO;$HQ=~Zx!z&Kc8B5VIjS^f;~(O&lm3EGC4jtFpwD6+`LNI z4H2#H6yB{K7d4R>pVUT2w1`0?qCI^&F`~6Brmh`|khyL|8yTI{My7^_w7!vkdNDCM zJ-Cv%d}Z}U%ShsBBU@{$b|Nt_IAYQq*TxfLLwzR`d9V{vCSSPakmS^XS9-=u0;ZngUU z7Bw_D2=xI^2H9wmjTfC9veX`bEV9hr0J1!m!7Gvfjnx0gU@k>x)_FEPgt#a$n3^Y7M_w7GNFQ3~wDM0J5RE z7kTxKvLCI#NZ0_})RmP@^)E6}?wVloUk_lt64V2*0)#m@i<$igY0J#w?*<6QJVzBx zv(^UMu<}|iL}~_Bfy@`;{hm#n*f454)KE_k)MJ9u z+x&(py_>s67$4B2ar_}&trynY{hKa!bTV&|gLzpI>=xESXu=UUt-DJ;Z-u*Hv1sU0 zLw$Wv@5#@QV6L#0L{pyd!BSvD1(E-a(*Kj5qfaAY?u>s*{Xa!S1`>hIhX5V_Oa1@m zs~E|VM4&_nNd13_fR$t=0u_b;dH*AT9sl1CJCs{@oOyk3R1KXx3H84G(ChqPjGE^0oR+j^C8z5Q9n|Hjxm2Pq0hfK zEia=vAalK24JR7mtp+bt4Sl`|n?G3nSOH9u4sFuLc~bKV9nZ7e;toO2_p+pz#jgA+PI-K=Z!qiLJVtj_h*k;hi1=whC=$SZ1i!8%x(MP6tV6M z!vOa6F9I2FO}9zX(M(IL<~Gaq1Za~s@XVfG)|@XCZqC^6zlch6Q&F3Qf>l*1TCuls zn#g}OSO#Dj4#A%&{|ucj^%y{Z`Y?TkW~RIzGQh}Q{dp3Wf|JIH$ zfBBQb;KjDljKz`PJ&nKDT=n7ZxA@nK?|(uKjgDF!=iO-v`f-m8$KA$S9{GLi%iE8t zp|fY9o+yZ==;oiNWU3aA2Vga@9$oKwhZ>rgfcn|O{E7qEJPfleeE~QwazIPueaqA9q?Ad5Bi3t-obS+`2Fbn9Yr{_bmh|fJ2)wK6*2jL1AsS_uwS97h?_fGTQBcte6(& zX0ve+4%V(pDVp9k9R21AI>^aZ`+<=eNgNLw48^>b76)Ae#6T7o2N6#RBbJxYN$1BQ zDHW^nhAlsEN#IYP-{xW^S%~~^l>Yw< z^*O))KF#b#r2gN8LjI5lY%T=o_+R?}Z>~y_+(-mUh=5)HkKj=NkHYUM|G0#O-hHI? zeF-&m<_y%2+g(0v<1y+?l6UCI+*eNd9oz-?Oldo%hK7fsex?AM4!0EBW3cqoei<#& zAtkdgpoWKA;o2qVWX8sjpsqDj_(0xGS8HaX(}@C#S~IgTfhn2Swaa9njIP(@{V(_b zxcfRM`9u-{KM2tAKRg295#_)7$uIL52xNDiR>PyM@K&tgdrCBHnXi=qFDlpwkw-5JJUHx>m>W4&pKfSACup}b>hR+V-gQkC+k%vo23@goKpD*e+R(d zDSvj)$aZ$@owS|Y?(*4AV%9-g;CAA}pk>yWqn(t&nq?O5*<5^>vh0M)C;B~SnCQRa zvr3sA$>cY1mFBe|nIwZ%WXUAn+jd0czZ#?fNWo{|-zy(RXG+iu=vRj5oG!CcuyO?J zlnG>jy79J4nG}tx32u}!DR>GBu}JM5b}nQl`*h_td_IV z6%h9uaV05Ort+r`xoHLRXZLHJ(jOaT%az0xRqkX3C5uOfVgGyvSF}XO*pj7DLDAyQ zi>PYx$}!@f-6GX3ME=)l|Eo574CrP5i{ngmZ*cO19f+J<)(chTp~K5DZkH#CfJ9)u z2+;RG`X1f?1HFZQh=0mMA|MgCYY?carn`Mt(Gby4?*Dz))UJFGiNJagVEVrw0q`T` z;(F+8`g=1komInU+u_dIv>u`^Qc+F|nleE`0%G;MkrE|S5_ z6BD!rX03|=U7_dude{?-Xo23wA$tLVTHrdA#rARwDKfLqO;Ye~_xTpzn7xc5!1K14 z*b8ugS6Z8iy?9Ryy{#sBNR_R3Ch}heJ_5i;;CGd8p@kwvtW>vUj!)6nx2F1Tecg6Q zi)ejr#vMD^U~R6166h&1<*<4t}AstPc@H6-e?zW;m>-=i5ZHzo^cUTd5 zV`)=w#%q2W-8DDUjJr^kc*>gVdj~0o4VN*{L_^(rCY=JxPHtt0J5jX+B z3HVD?lm#$*_+1p>+q--KOie?Kvp@~JusJ9Xz@;|?`M{ZvDaT#+e#*7EavOg$P18&^ zW_?s0wW}0Sb@^;5#Z*{HM52KGc z|2pk|iqT`_wf~i;N0FsS1SA4M5uo#b`Tf73u*v)qfr>@I{{27s{jZ9xO3AoHU|k5% z_dmP|;7#T2brF&`7lS}%aZU~Qh2bsxmf|_J2R97_n9KSx3RtJL{x(@38J!%N8XD62 zM*21UTbr1i9$ZOWzOs6wWhC+RA!;y>w6@O9`r#V4Y=i}8e(PHM+Av#O73*h8AgKcf48D`C`GOcM@zPj>(FtjXUf zR0FZVHQ;R~$X5fUwGsHKh|MV~yVFcm&K9bu?!Xo0W)vu@dNy7{3YY_iU!c0jjCE5a zv682mQa=DDd946eNCKGvM2-r`e>Hd%;J-hFXW>tk-*d>bzUvaxl8c{;T1YRZ$k)6U z=PmkrM>JQxx+?7*x&3SILkrAlO;ndV$O-Cu_q1s@6}5X---`T4E~}w|0jM7p6!}h) zf;K--;=BFv7F@5tf06A-GvLXfsN8pQ$Wmwgu~@8{|KgGw9&Cnd)0Y0n$qdu=i}AeG z*%ba_7HVY5ze-!oT58q5SXQ}Bz#FaqC+mCSxC@DY6bJ0!_5pq^&k_NNz$QUJ>i;)M zMMyRz0%bx#>i^3Gv@AvJ}?;>6GQ zl+}-NUnFeIUQM+xRsmCG{aiYUz1^@TU(nqXt^S5-_(dklJ*~~`f05Qi7JI>_=jT() z%$?N164&*M2?1-uTk9_p4pbBCP;8228o(Fu|BnC=fj>eaHxbMBFH3oBgSL-iQGq4Jz`WNr_Y^{d4vYwY14NKwO@xwo0XBTu;co z4Fq-?<+Bd#d6fysg~ELk_VzEL(%g&!CZS+eRSLN%U=DctJyiFYneu{%`~3$(C$AO2 z4o)BwfO)fLV>I>ujQ}))e+x(8+scP5eSp5}rqlQT^3{daw79;28CM?p0_-k+F#7VUPJ6w7tOzz)##l{ru-MnGUT;v9X}cW zZ`AjHNY4?E8~b*=My}`~_5U0Rd6o!lG6balf0I>+WJe-UVg#iAzr+Ab@)CgxL4fK1 z&j5Hv`C5gryjj`Is(O{1`@ds)XDC0r#01|nRzI44k+4IxRxV|~$V9nkwVC~TwVVIH zgD0-@7ZU(NcqFOmyZdnJ;C0{Z?r zz1GeDUwjPO5{z&Ci1EJB%B%SosTp7eQvQqgd$w0Y|6d2D0Q%SH9I8=1rA)y83qJuT z!LPulaCC9UWL-^jL;F;d$OzfxV*bjd`Dtb>NG~Q+*9THdV>7dtX692`*P%{r;!0{Z zJ(r%HSxql3YJH1~sq5O%wdM3`s(op3;l|mmHI0O-Y1>#o$;mB@QE|n@`l*iA)`S_O z^ecYrCpfOwG!cS?65G~c{WPDcscGjlXO|WhQnLj0Xmb6OpQ^5DC6tZYr`E8IpnI;W zro*J0tFetBeHK}o)<%$=RP0S_BdCr-p=oUdK{EcYQa%FEC(y9+GyFpy5`oQw!1zvU z&llT({^^+=Zav>dP=0E=v*+6gy63jJ_Iw*bn#w;s4d7|`W94_zz~-s?%Hl-V^exV9 zbm=QF_o}iieRNObqsRO{6Ap6z9VhndTh-9$sP)@~?tIw2Cmf~H3@dp(0NnHY_M>Rm z>(tQMvrtb6t2Xm+YImk^7EN=k2H-WgTSbq)O$|*ciCh8?~YPL5fYs{vRp(#wL# z|3=#X`|6qfzfUveSK9wgDC7@`z~(}L>i^~bKbxykBsUU)5+We&|0M)hl9mWm5CZi5 z555V&H^tKo?bxb~`L-A0~?q~J#`&dB(b+|8L>%*PBu-X7&*e#5j= zTDNksK*JVPHlt%!(|4%hsSbE6;Rk-hv%yh0!SMI(A0Z;+FiDoxNkZhL+;zm{AAkDu z>&nCagsLKPWsd7RY13On{+nKOLz)OXV{PPW<)j?C#~ol@%Ux#EIiaQ79F zh^KsE9~M2N-^af3c+9SRH+@AY4a+)JW0fvV;H@aX)x}E4zsY5Y-pFeWaLMe~(n92aqxAn@z`FlFjrAb>jIX5rpFtu+iNK~qfR6vA{(sZei)2V5 zP$~rM`hNru19%vINBKahO1%5%>ihHtHFV|-)Q@|QIj8OJDYn5HO@7($&@Q-RN}K+G z8X6vk`k4ZJI=oVBjI#9K@XKkD{wSFRJ*0+*TjAOz=XA!#k)W?NQ}{^UO<8MZqGSI2 zdw*Jo=f*^^v}#%_Yi0iaH&y`1Ln0s%xCarSZ=&oCa64#B_};SyJ@Tg6xW_7I%JG4v_KBaFP0! z4Y2=J8$AZ}vj4^7j_-mZa-Yk3p{hJ|csWLK@+1+E2&@+Y`u<1X1Lzm%=jbi;L;O=7 z5&?<8U4uYXH3AS;RnZX9P@y3tA(4Nn|G#T0TRw=Hl`%Xy9~&l-Oxys%)D$b&(L3#O*5Ab>k;gq z+zxLY_kp}&>##E&2zo#E5_CU!>3T|G?x@u2^EidI=7?U&ok6Z)gH0cNd> z09}#i--ER$7SRB`ZA10~0yV&O=!)&-7E)(spVRkI^ltb07T=h?kRs6YHksH9aG+OO zqlvwEPY}J$CV5Det$QZ&Uj^`{Umt?sRQ?jZ;8&_jpARqLYo;x4P4(UKy6tcl(em63 zJ9e_c+FJ?5)!VqEzpU@4qn^x79}qGViv3XoA(+<+W2b5W7|0G|r{O7e#1d1dA5cTR zy-*j|-ViF}8>$W)j1bA6Ij{9a$m`$kvRiLaLw$XU-flAx2-IvA7kdi0ozEa(&*|67 zLgas)>wjvEz5pJ7&Cv1Vh`14nPYQ{TlYe{>|0oXF!Sw$cyXZ5{_=KZtiHZ-Q$Rj%kd@N=|LdV)-!MMPci_&1DbZ+*HAsu9Q?s zE3hQj|5SinOBN*pm5%_`|HEkjr^>U4;%3* z=%GKSchaF*=Da7oIo&d2%O|>?`eX~Ffi=ng;K?-U9jy7xdOja(2Gslz=mCxU_~3JD ztiNwEp^c7ckz7l3NUf)Ft0b+)+su$XtRJEv-QMK`Bx)Tj0;IwgK}&-e9qK<6nM)@l znkQT%qmv_3Lql5MNWX@EYZH^xgDZ*4S5|Mdj3k~uM5`gv+NzyM3}6uY6GI7HKc~h= ZhqVa%npm!$Jna#Mt$>yWSvLFM{|DfX5K{mE literal 0 HcmV?d00001 diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 70751fc0..8efec657 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -13,7 +13,7 @@ 3.5 - v4.0 + v4.5.2 ..\ @@ -29,7 +29,6 @@ prompt 4 false - x86 false @@ -40,7 +39,16 @@ prompt 4 true - x86 + false + + + pdbonly + + bin\ + TRACE;LINUX + prompt + 4 + true false @@ -123,9 +131,8 @@ - - False - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll + + ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net451\System.Data.SQLite.dll @@ -149,11 +156,17 @@ + + + + + + + - @@ -167,14 +180,10 @@ - - - - @@ -228,6 +237,12 @@ Properties\SharedAssemblyVersion.cs + + + {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} + SharpMap.SqlServerSpatialObjects + + {AF0594AB-FC1D-47E4-8CDD-361CDC621A36} @@ -249,10 +264,6 @@ {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB} SharpMap.Serialization - - {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} - SharpMap.SqlServerSpatialObjects - {723F9FD5-8424-4EEE-BA92-57ECEE0F395D} SharpMap.Utilities.Indexing.SbnTree @@ -277,6 +288,9 @@ SettingsSingleFileGenerator Settings.Designer.cs + + PreserveNewest + PreserveNewest @@ -331,9 +345,7 @@ ResXFileCodeGenerator Resources.Designer.cs - - - + @@ -348,13 +360,13 @@ - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - + - \ No newline at end of file + + diff --git a/UnitTests/WMS/Encoding.cs b/UnitTests/WMS/Encoding.cs index 24a35ac8..28ea35d7 100644 --- a/UnitTests/WMS/Encoding.cs +++ b/UnitTests/WMS/Encoding.cs @@ -26,14 +26,14 @@ public void TestUrlColorEncoding() private static void TestUrlColorEncoding(Color color) { - Console.WriteLine("Color : {0}", color); + System.Diagnostics.Trace.WriteLine($"Color : {color}"); var htmlColor = ColorTranslator.ToHtml(Color.FromArgb(color.ToArgb())); - Console.WriteLine("htmlColor : {0}", htmlColor); + System.Diagnostics.Trace.WriteLine($"htmlColor : {htmlColor}"); var urlEncode = System.Web.HttpUtility.UrlEncode(htmlColor); - Console.WriteLine("urlEncode : {0}", urlEncode); + System.Diagnostics.Trace.WriteLine($"urlEncode : {urlEncode}"); var escapeDataString = Uri.EscapeDataString(htmlColor); - Console.WriteLine("escapeDataString: {0}", escapeDataString); - Console.WriteLine(); + System.Diagnostics.Trace.WriteLine($"escapeDataString: {escapeDataString}"); + System.Diagnostics.Trace.WriteLine(""); Assert.IsTrue(string.Compare(urlEncode, escapeDataString, StringComparison.InvariantCultureIgnoreCase) == 0); } diff --git a/UnitTests/app.config b/UnitTests/app.config index b45e1d0f..bc62dafe 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -9,8 +9,7 @@ - + @@ -24,25 +23,25 @@ - + - + - + diff --git a/UnitTests/packages.config b/UnitTests/packages.config index e37e6d8f..f07147aa 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -21,5 +21,5 @@ - + \ No newline at end of file From 587d2e01982a3f4fa6fb1511ef7548dee7443ce2 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Tue, 23 Oct 2018 14:04:35 +0200 Subject: [PATCH 060/186] Remove backup files --- .../SharpMap.Layers.BruTile.bak | 127 ------ SharpMap/SharpMap.csproj.bak | 380 ------------------ 2 files changed, 507 deletions(-) delete mode 100644 SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.bak delete mode 100644 SharpMap/SharpMap.csproj.bak diff --git a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.bak b/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.bak deleted file mode 100644 index cf3deaae..00000000 --- a/SharpMap.Layers.BruTile/SharpMap.Layers.BruTile.bak +++ /dev/null @@ -1,127 +0,0 @@ - - - - - Debug - AnyCPU - {D84F31ED-3D81-42F2-9190-3D021D6038A0} - Library - Properties - SharpMap - SharpMap.Layers.BruTile - v4.0 - 512 - Client - ..\ - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\SharpMap.Layers.BruTile.XML - - - - ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll - True - - - ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - - ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - - - ..\packages\System.Data.SQLite.Core.1.0.94.0\lib\net40\System.Data.SQLite.dll - True - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - - - - - - - - - - - - - - - - - - {c83777fc-aabb-47d9-911f-d76255d4d541} - SharpMap - - - - - - - Designer - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file diff --git a/SharpMap/SharpMap.csproj.bak b/SharpMap/SharpMap.csproj.bak deleted file mode 100644 index 65c38c40..00000000 --- a/SharpMap/SharpMap.csproj.bak +++ /dev/null @@ -1,380 +0,0 @@ - - - - Debug - AnyCPU - {C83777FC-AABB-47D9-911F-D76255D4D541} - Library - Properties - SharpMap - SharpMap - - - 3.5 - - - v4.0 - Client - ../ - - - true - full - false - bin\Debug\ - TRACE;DEBUG - prompt - 4 - true - bin\Debug\SharpMap.XML - AnyCPU - false - - - pdbonly - true - bin\Release\ - TRACE;UseMapBox - prompt - 4 - bin\Release\SharpMap.XML - AnyCPU - false - - - - ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll - True - - - ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll - True - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - - - Designer - - - - - - - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - capabilities_1_3_0.xsd - - - - - - - exceptions_1_3_0.xsd - - - - - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From c15c6f4697e448fb05b4416d8b19bcb110327b83 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Tue, 23 Oct 2018 14:07:21 +0200 Subject: [PATCH 061/186] Convert SharpMap.Layers.HeatLayer to .Net-Standard project * Fix casting error in VectorLayer.Clone --- .../SharpMap.Layers.HeatLayer.csproj | 91 ++++--------------- SharpMap.Layers.HeatLayer/packages.config | 6 +- SharpMap/Layers/VectorLayer.cs | 2 +- 3 files changed, 20 insertions(+), 79 deletions(-) diff --git a/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj b/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj index ee68009f..93d655ea 100644 --- a/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj +++ b/SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.csproj @@ -1,84 +1,29 @@ - - + + + + - Debug - AnyCPU - {47F790C2-6DC0-4A09-9026-FC81A09FD6A3} - Library - Properties - SharpMap.Layers - SharpMap.Layers.HeatLayer - v4.0 - 512 - ..\ - Client - - - true - full - false - bin\Debug\ - TRACE;DEBUG - prompt - 4 - bin\Debug\SharpMap.Layers.HeatLayer.XML - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - bin\Release\SharpMap.Layers.HeatLayer.XML - false + net40-client;net452;netstandard2.0 + SharpMap HeatLayer + Copyright 2013-2018 SharpMap - Team + SharpMap Heat + >Heat layer for SharpMap. + - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - - - - + + - - - - - - Properties\SharedAssemblyVersion.cs - + + - - + - - + - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - + + \ No newline at end of file diff --git a/SharpMap.Layers.HeatLayer/packages.config b/SharpMap.Layers.HeatLayer/packages.config index 1a9735ad..62e8ada2 100644 --- a/SharpMap.Layers.HeatLayer/packages.config +++ b/SharpMap.Layers.HeatLayer/packages.config @@ -1,9 +1,5 @@  - - - - - \ No newline at end of file + diff --git a/SharpMap/Layers/VectorLayer.cs b/SharpMap/Layers/VectorLayer.cs index 3cb6a408..5e06ff38 100644 --- a/SharpMap/Layers/VectorLayer.cs +++ b/SharpMap/Layers/VectorLayer.cs @@ -632,7 +632,7 @@ public object Clone() var res = (VectorLayer)MemberwiseClone(); res.Style = Style.Clone(); if (Theme is ICloneable) - res.Theme = (IThemeEx)((ICloneable)Theme).Clone(); + res.Theme = (ITheme)((ICloneable)Theme).Clone(); return res; } From 1b19b58b1d417108f2710b223a8a9c812316c205 Mon Sep 17 00:00:00 2001 From: joriswit Date: Wed, 24 Oct 2018 22:38:16 +0200 Subject: [PATCH 062/186] Refactor OleDb_ providers to Db_ provider (#113) * Refactored OleDbPoint provider to DbPoint provider. * Make DbProvider private * Add "RequiresWindow"s category, omit unit test marked with that category in travis * Fix DbTwoPointLine's GetSpatialConstraint function The previous implementation just checked if one of the points two points making up the line were inside the constraining bounding box. This is not sufficient. The logic is changed to mimic Envelope.Intersects. * Add EntityDecorator property and ToEntity(string) functions to properly decorate table- and column entities, thus allowing for whitespace in column names. NOTE: not wired throughout whole provider. * Changed OleDbPoint provider to be a subclass of the DbPoint provider * Delete OleDbTwoPointLine, use DbTwoPointLine now --- .travis.yml | 2 +- SharpMap/Data/Providers/DbPoint.cs | 460 ++++++++ ...OleDbTwoPointLine.cs => DbTwoPointLine.cs} | 989 ++++++++++-------- SharpMap/Data/Providers/OleDbPoint.cs | 371 +------ .../Data/Providers/DbPointProviderTest.cs | 188 ++++ .../Providers/DbTwoPointLineProviderTest.cs | 213 ++++ .../Data/Providers/OleDbPointProviderTest.cs | 15 +- UnitTests/UnitTests.csproj | 4 +- 8 files changed, 1420 insertions(+), 822 deletions(-) create mode 100644 SharpMap/Data/Providers/DbPoint.cs rename SharpMap/Data/Providers/{OleDbTwoPointLine.cs => DbTwoPointLine.cs} (70%) create mode 100644 UnitTests/Data/Providers/DbPointProviderTest.cs create mode 100644 UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs diff --git a/.travis.yml b/.travis.yml index f341a2b3..5728e611 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,4 +8,4 @@ script: - dotnet msbuild SharpMap.targets /t:Version /p:UseTools35=false /v:minimal - dotnet msbuild SharpMap.sln /m "/t:Restore;Build" /p:Configuration=ReleaseLinux "/p:Platform=Any CPU" /p:UseTools35=false "/p:FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/" /v:minimal /p:WarningLevel=3 - cp SharpMap/SpatialRefSys.xml UnitTests/bin/ -- mono testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe --nothread UnitTests/bin/UnitTests.dll +- mono testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe --nothread --exclude:RequiresWindows UnitTests/bin/UnitTests.dll diff --git a/SharpMap/Data/Providers/DbPoint.cs b/SharpMap/Data/Providers/DbPoint.cs new file mode 100644 index 00000000..cff51721 --- /dev/null +++ b/SharpMap/Data/Providers/DbPoint.cs @@ -0,0 +1,460 @@ +// Copyright 2006 - Morten Nielsen (www.iter.dk) +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using System; +using System.Collections.ObjectModel; +using System.Data; +using System.Data.Common; +using GeoAPI.Geometries; + +namespace SharpMap.Data.Providers +{ + /// + /// The XYColumnPoint provider is used for rendering point data from an ADO.NET compatible data source. + /// + /// + /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, + /// and an integer-type column containing a unique identifier for each row. + /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your data source table. + /// + /// Adding a SQLite data source to a layer: + /// + /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); + /// string connStr = @"Data Source=MyDatabaseFile.sqlite"; + /// myLayer.DataSource = new Data.Providers.XYColumnPoint(System.Data.SQLite.SQLiteFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); + /// + /// + /// + /// Adding a SQL Server datasource to a layer: + /// + /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); + /// string connStr = @"Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True;"; + /// myLayer.DataSource = new Data.Providers.XYColumnPoint(System.Data.SqlClient.SqlClientFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); + /// + /// + /// + [Serializable] + public class DbPoint : PreparedGeometryProvider + { + private string _definitionQuery; + + /// + /// Initializes a new instance of the XYColumnPoint provider + /// + /// The ADO.NET database provider factory + /// The connection string + /// The name of the table + /// The name of the object id column + /// The name of the x-ordinates column + /// The name of the y-ordinates column + public DbPoint(DbProviderFactory provider, string connectionString, string tableName, string oidColumnName, string xColumn, string yColumn) + { + Table = tableName; + XColumn = xColumn; + YColumn = yColumn; + ObjectIdColumn = oidColumnName; + DbProvider = provider; + ConnectionString = connectionString; + } + + /// + /// Data table name + /// + public string Table { get; set; } + + + /// + /// Name of column that contains the Object ID + /// + public string ObjectIdColumn { get; set; } + + /// + /// Name of column that contains X coordinate + /// + public string XColumn { get; set; } + + /// + /// Name of column that contains Y coordinate + /// + public string YColumn { get; set; } + + /// + /// Gets or sets a value indicating the connection string + /// + public string ConnectionString + { + get { return ConnectionID; } + set { ConnectionID = value; } + } + + /// + /// The used to create connections, commands etc. + /// + private DbProviderFactory DbProvider { get; } + + /// + /// Definition query used for limiting the data set + /// + public string DefinitionQuery + { + get { return _definitionQuery; } + set { _definitionQuery = value; } + } + + /// + /// Returns geometries within the specified bounding box + /// + /// + /// + public override Collection GetGeometriesInView(Envelope bbox) + { + var features = new Collection(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + //open the connection + conn.Open(); + + var strSQL = "SELECT " + XColumn + ", " + YColumn + " FROM " + Table + " WHERE "; + strSQL += GetDefinitionQueryConstraint(true); + //Limit to the points within the bounding box + strSQL += GetSpatialConstraint(bbox); + + var factory = Factory; + var precisionModel = factory.PrecisionModel; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + while (dr.Read()) + { + if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) + { + var c = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); + precisionModel.MakePrecise(c); + features.Add(factory.CreatePoint(c)); + } + } + } + } + } + } + return features; + } + + /// + /// Returns geometry Object IDs whose bounding box intersects 'bbox' + /// + /// + /// + public override Collection GetObjectIDsInView(Envelope bbox) + { + var objectlist = new Collection(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + //open the connection + conn.Open(); + + var strSQL = "SELECT " + ObjectIdColumn + " FROM " + Table + " WHERE "; + + //Limit to the DefinitionQuery + strSQL += GetDefinitionQueryConstraint(true); + + //Limit to the points within the boundingbox + strSQL += GetSpatialConstraint(bbox); + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + while (dr.Read()) + if (!dr.IsDBNull(0)) + objectlist.Add(Convert.ToUInt32(dr.GetValue(0))); + } + } + conn.Close(); + } + } + return objectlist; + } + + /// + /// Returns the geometry corresponding to the Object ID + /// + /// Object ID + /// geometry + public override IGeometry GetGeometryByID(uint oid) + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT " + XColumn + ", " + YColumn + " FROM " + Table + " WHERE " + ObjectIdColumn + + "=" + oid.ToString(Map.NumberFormatEnUs); + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + if (dr.Read()) + { + //If the read row is OK, create a point geometry from the XColumn and YColumn and return it + if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) + { + var c = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); + Factory.PrecisionModel.MakePrecise(c); + return Factory.CreatePoint(c); + } + } + } + } + conn.Close(); + } + } + return null; + } + + /// + /// Function to limit the points to the . + /// + /// The spatial predicate bounding box + /// A SQL string limiting the resultset based on an Envelope constraint. + private string GetSpatialConstraint(Envelope bbox) + { + return string.Format(Map.NumberFormatEnUs, "({0} BETWEEN {1} AND {2}) AND ({3} BETWEEN {4} AND {5})", + XColumn, bbox.MinX, bbox.MaxX, + YColumn, bbox.MinY, bbox.MaxY); + /* + return "(" + XColumn + " BETWEEN " + bbox.Left().ToString(Map.NumberFormatEnUs) + " AND " + bbox.Right().ToString(Map.NumberFormatEnUs) + ") AND " + + "(" + YColumn + " BETWEEN " + bbox.Bottom().ToString(Map.NumberFormatEnUs) + " AND " + bbox.Top().ToString(Map.NumberFormatEnUs) + ")"; + */ + } + + /// + /// Function to limit the features based on + /// + /// Defines if " AND " should be appended. + /// A SQL string limiting the resultset, if desired. + private string GetDefinitionQueryConstraint(bool addAnd) + { + var addAndText = addAnd ? " AND" : string.Empty; + if (!string.IsNullOrEmpty(_definitionQuery)) + return string.Format("{0}{1} ", _definitionQuery, addAndText); + return string.Empty; + } + + /// + /// Returns all features with the view box + /// + /// view box + /// FeatureDataSet to fill data into + public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) + { + //List features = new List(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT * FROM " + Table + " WHERE "; + //If a definition query has been specified, add this as a filter on the query + strSQL += GetDefinitionQueryConstraint(true); + + //Limit to the points within the boundingbox + strSQL += GetSpatialConstraint(bbox); + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = strSQL; + + using (var reader = cmd.ExecuteReader()) + { + if (reader == null) + throw new InvalidOperationException(); + + //Set up result table + var fdt = new FeatureDataTable(); + fdt.TableName = Table; + for (var c = 0; c < reader.FieldCount; c++) + { + var fieldType = reader.GetFieldType(c); + if (fieldType == null) + throw new Exception("Failed to retrieve field type for column: " + c); + fdt.Columns.Add(reader.GetName(c), fieldType); + } + + var dataTransfer = new object[reader.FieldCount]; + + //Get factory and precision model + var factory = Factory; + var pm = factory.PrecisionModel; + + fdt.BeginLoadData(); + while (reader.Read()) + { + var count = reader.GetValues(dataTransfer); + System.Diagnostics.Debug.Assert(count == dataTransfer.Length); + + var fdr = (FeatureDataRow)fdt.LoadDataRow(dataTransfer, true); + var c = new Coordinate(Convert.ToDouble(fdr[XColumn]), Convert.ToDouble(fdr[YColumn])); + pm.MakePrecise(c); + fdr.Geometry = Factory.CreatePoint(c); + } + fdt.EndLoadData(); + + ds.Tables.Add(fdt); + } + } + } + } + + /// + /// Returns the number of features in the dataset + /// + /// Total number of features + public override int GetFeatureCount() + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT Count(*) FROM " + Table; + if (!String.IsNullOrEmpty(_definitionQuery)) + //If a definition query has been specified, add this as a filter on the query + strSQL += " WHERE " + _definitionQuery; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + return Convert.ToInt32(command.ExecuteScalar()); + } + } + } + + /// + /// Returns a datarow based on a RowID + /// + /// + /// datarow + public override FeatureDataRow GetFeature(uint rowId) + { + using (var conn = DbProvider.CreateConnection()) + { + var strSQL = "SELECT * FROM " + Table + " WHERE " + ObjectIdColumn + "=" + rowId.ToString(Map.NumberFormatEnUs); + + conn.ConnectionString = ConnectionString; + conn.Open(); + + using (var selectCommand = conn.CreateCommand()) + { + selectCommand.CommandText = strSQL; + + using (var adapter = DbProvider.CreateDataAdapter()) + { + adapter.SelectCommand = selectCommand; + + var ds = new DataSet(); + adapter.Fill(ds); + conn.Close(); + if (ds.Tables.Count > 0) + { + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (DataColumn col in ds.Tables[0].Columns) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + if (ds.Tables[0].Rows.Count > 0) + { + var dr = ds.Tables[0].Rows[0]; + var fdr = fdt.NewRow(); + foreach (DataColumn col in ds.Tables[0].Columns) + fdr[col.Ordinal] = dr[col]; + if (dr[XColumn] != DBNull.Value && dr[YColumn] != DBNull.Value) + fdr.Geometry = + Factory.CreatePoint(new Coordinate((double)dr[XColumn], (double)dr[YColumn])); + return fdr; + } + return null; + } + return null; + } + } + } + } + + /// + /// Function to return the of dataset + /// + /// The extent of the dataset + public override Envelope GetExtents() + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + var strSQL = "SELECT Min(" + XColumn + ") as MinX, Min(" + YColumn + ") As MinY, " + + "Max(" + XColumn + ") As MaxX, Max(" + YColumn + ") As MaxY FROM " + Table; + + //If a definition query has been specified, add this as a filter on the query + if (!String.IsNullOrEmpty(_definitionQuery)) + strSQL += " WHERE " + _definitionQuery; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + if (dr.Read()) + { + //If the read row is OK, create a point geometry from the XColumn and YColumn and return it + if (dr[0] != DBNull.Value && dr[1] != DBNull.Value && dr[2] != DBNull.Value && + dr[3] != DBNull.Value) + return new Envelope(new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])), + new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3]))); + } + } + conn.Close(); + } + } + return null; + } + + #region Disposers and finalizers + + #endregion + } +} diff --git a/SharpMap/Data/Providers/OleDbTwoPointLine.cs b/SharpMap/Data/Providers/DbTwoPointLine.cs similarity index 70% rename from SharpMap/Data/Providers/OleDbTwoPointLine.cs rename to SharpMap/Data/Providers/DbTwoPointLine.cs index 229c747a..b282eb72 100644 --- a/SharpMap/Data/Providers/OleDbTwoPointLine.cs +++ b/SharpMap/Data/Providers/DbTwoPointLine.cs @@ -1,455 +1,534 @@ -#if !NETSTANDARD -// Copyright 2013 - Lothar Otto (www.sodako.de) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections.ObjectModel; -using System.Data; -using System.Data.OleDb; -using GeoAPI.Geometries; - -namespace SharpMap.Data.Providers -{ - /// - /// The OleDbPoint provider is used for rendering point data from an OleDb compatible datasource. - /// - /// - /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, - /// and an integer-type column containing a unique identifier for each row. - /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your datasource table. - /// - [Serializable] - public class OleDbTwoPointLine : PreparedGeometryProvider - { - private string _definitionQuery; - - /// - /// Initializes a new instance of the OleDbPoint provider - /// - /// The connection string - /// The name of the table - /// The name of the object id column - /// The name of the x-ordinates column of the beginning of the line - /// The name of the y-ordinates column of the beginning of the line - /// The name of the x-ordinates column of the end of the line - /// The name of the y-ordinates column of the end of the line - public OleDbTwoPointLine(string connectionStr, string tablename, string oidColumnName, string xColumnBegin, string yColumnBegin, string xColumnEnd, string yColumnEnd) - { - Table = tablename; - XColumnBegin = xColumnBegin; - YColumnBegin = yColumnBegin; - XColumnEnd = xColumnEnd; - YColumnEnd = yColumnEnd; - ObjectIdColumn = oidColumnName; - ConnectionString = connectionStr; - } - - /// - /// Data table name - /// - public string Table { get; set; } - - - /// - /// Name of column that contains the Object ID - /// - public string ObjectIdColumn { get; set; } - - /// - /// Name of column that contains X coordinate start - /// - public string XColumnBegin { get; set; } - - /// - /// Name of column that contains Y coordinate start - /// - public string YColumnBegin { get; set; } - - /// - /// Name of column that contains X coordinate start - /// - public string XColumnEnd { get; set; } - - /// - /// Name of column that contains Y coordinate start - /// - public string YColumnEnd { get; set; } - - /// - /// Connectionstring - /// - public string ConnectionString - { - get { return ConnectionID; } - set { ConnectionID = value; } - } - - /// - /// Definition query used for limiting dataset - /// - public string DefinitionQuery - { - get { return _definitionQuery; } - set { _definitionQuery = value; } - } - - /// - /// Returns geometries within the specified bounding box - /// - /// - /// - public override Collection GetGeometriesInView(Envelope bbox) - { - var features = new Collection(); - using (var conn = new OleDbConnection(ConnectionString)) - { - //open the connection - conn.Open(); - - var strSQL = "SELECT " + XColumnBegin + ", " + YColumnBegin + ", " + XColumnEnd + ", " + YColumnEnd + " FROM " + Table + " WHERE "; - strSQL += GetDefinitionQueryConstraint(true); - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - var factory = Factory; - var precisionModel = factory.PrecisionModel; - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - while (dr.Read()) - { - if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) - { - var c1 = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); - precisionModel.MakePrecise(c1); - var c2 = new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3])); - precisionModel.MakePrecise(c2); - features.Add(Factory.CreateLineString(new[] { c1, c2 })); - } - } - } - } - } - } - return features; - } - - /// - /// Returns geometry Object IDs whose bounding box intersects 'bbox' - /// - /// - /// - public override Collection GetObjectIDsInView(Envelope bbox) - { - var objectlist = new Collection(); - using (var conn = new OleDbConnection(ConnectionString)) - { - //open the connection - conn.Open(); - - var strSQL = "SELECT " + ObjectIdColumn + " FROM " + Table + " WHERE "; - - //Limit to the DefinitionQuery - strSQL += GetDefinitionQueryConstraint(true); - - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - while (dr.Read()) - if (!dr.IsDBNull(0)) - objectlist.Add((uint)dr.GetInt32(0)); - } - } - conn.Close(); - } - } - return objectlist; - } - - /// - /// Returns the geometry corresponding to the Object ID - /// - /// Object ID - /// geometry - public override IGeometry GetGeometryByID(uint oid) - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT " + XColumnBegin + ", " + YColumnBegin + ", " + XColumnEnd + ", " + YColumnEnd + " FROM " + Table + " WHERE " + ObjectIdColumn + - "=" + oid.ToString(Map.NumberFormatEnUs); - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - if (dr.Read()) - { - //If the read row is OK, create a point geometry from the XColumn and YColumn and return it - if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) - { - - var c1 = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); - Factory.PrecisionModel.MakePrecise(c1); - var c2 = new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3])); - Factory.PrecisionModel.MakePrecise(c2); - return Factory.CreateLineString(new[] { c1, c2 }); - - } - } - } - } - conn.Close(); - } - } - return null; - } - - /// - /// Function to limit the points to the . - /// - /// The spatial predicate bounding box - /// A SQL string limiting the resultset based on an Envelope constraint. - private string GetSpatialConstraint(Envelope bbox) - { - return string.Format(Map.NumberFormatEnUs, "({0} BETWEEN {1} AND {2}) AND ({3} BETWEEN {4} AND {5}) AND ({6} BETWEEN {1} AND {2}) AND ({7} BETWEEN {4} AND {5})", - XColumnBegin, bbox.MinX, bbox.MaxX, - YColumnBegin, bbox.MinY, bbox.MaxY, - XColumnEnd, YColumnEnd); - } - - /// - /// Function to limit the features based on - /// - /// Defines if " AND " should be appended. - /// A SQL string limiting the resultset, if desired. - private string GetDefinitionQueryConstraint(bool addAnd) - { - var addAndText = addAnd ? " AND" : string.Empty; - if (!string.IsNullOrEmpty(_definitionQuery)) - return string.Format("{0}{1} ", _definitionQuery, addAndText); - return string.Empty; - } - - /// - /// Returns all features with the view box - /// - /// view box - /// FeatureDataSet to fill data into - public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) - { - //List features = new List(); - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT * FROM " + Table + " WHERE "; - //If a definition query has been specified, add this as a filter on the query - strSQL += GetDefinitionQueryConstraint(true); - - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - using (var cmd = new OleDbCommand(strSQL, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - if (reader == null) - throw new InvalidOperationException(); - - //Set up result table - var fdt = new FeatureDataTable(); - fdt.TableName = Table; - for (var c = 0; c < reader.FieldCount; c++) - { - var fieldType = reader.GetFieldType(c); - if (fieldType == null) - throw new Exception("Failed to retrieve field type for column: " + c); - fdt.Columns.Add(reader.GetName(c), fieldType); - } - - var dataTransfer = new object[reader.FieldCount]; - - //Get factory and precision model - var factory = Factory; - var pm = factory.PrecisionModel; - - fdt.BeginLoadData(); - while (reader.Read()) - { - var count = reader.GetValues(dataTransfer); - System.Diagnostics.Debug.Assert(count == dataTransfer.Length); - - var fdr = (FeatureDataRow)fdt.LoadDataRow(dataTransfer, true); - var c1 = new Coordinate(Convert.ToDouble(fdr[XColumnBegin]), Convert.ToDouble(fdr[YColumnBegin])); - pm.MakePrecise(c1); - var c2 = new Coordinate(Convert.ToDouble(fdr[XColumnEnd]), Convert.ToDouble(fdr[YColumnEnd])); - pm.MakePrecise(c2); - fdr.Geometry = Factory.CreateLineString(new[] { c1, c2 }); - } - fdt.EndLoadData(); - - ds.Tables.Add(fdt); - } - } - } - } - - /// - /// Returns the number of features in the dataset - /// - /// Total number of features - public override int GetFeatureCount() - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT Count(*) FROM " + Table; - if (!String.IsNullOrEmpty(_definitionQuery)) - //If a definition query has been specified, add this as a filter on the query - strSQL += " WHERE " + _definitionQuery; - - return (int)new OleDbCommand(strSQL, conn).ExecuteScalar(); - } - } - - /// - /// Returns a datarow based on a RowID - /// - /// - /// datarow - public override FeatureDataRow GetFeature(uint rowId) - { - using (var conn = new OleDbConnection(ConnectionString)) - { - var strSQL = "SELECT * FROM " + Table + " WHERE " + ObjectIdColumn + "=" + rowId.ToString(Map.NumberFormatEnUs); - conn.Open(); - - using (var adapter = new OleDbDataAdapter(strSQL, conn)) - { - var ds = new DataSet(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (DataColumn col in ds.Tables[0].Columns) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - if (ds.Tables[0].Rows.Count > 0) - { - var dr = ds.Tables[0].Rows[0]; - var fdr = fdt.NewRow(); - foreach (DataColumn col in ds.Tables[0].Columns) - fdr[col.Ordinal] = dr[col]; - if (dr[XColumnBegin] != DBNull.Value && dr[YColumnBegin] != DBNull.Value && dr[XColumnEnd] != DBNull.Value && dr[YColumnEnd] != DBNull.Value) - fdr.Geometry = Factory.CreateLineString(new[] { new Coordinate((double)dr[XColumnBegin], (double)dr[YColumnBegin]), new Coordinate((double)dr[XColumnEnd], (double)dr[YColumnEnd]) }); - - return fdr; - } - return null; - } - return null; - } - } - } - - /// - /// Function to return the of dataset - /// - /// The extent of the dataset - public override Envelope GetExtents() - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - var strSQL = "SELECT Min(" + XColumnBegin + ") as MinXBegin, Min(" + YColumnBegin + ") As MinYBegin, " + - "Max(" + XColumnBegin + ") As MaxXBegin, Max(" + YColumnBegin + ") As MaxYBegin, " + - "Min(" + XColumnEnd + ") as MinXEnd, Min(" + YColumnEnd + ") As MinYEnd, " + - "Max(" + XColumnEnd + ") As MaxXEnd, Max(" + YColumnEnd + ") As MaxYEnd, " + - " FROM " + Table; - - //If a definition query has been specified, add this as a filter on the query - if (!String.IsNullOrEmpty(_definitionQuery)) - strSQL += " WHERE " + _definitionQuery; - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - if (dr.Read()) - { - //If the read row is OK, create a point geometry from the XColumn and YColumn and return it - if (dr[0] != DBNull.Value && dr[1] != DBNull.Value && dr[2] != DBNull.Value && dr[3] != DBNull.Value - && dr[4] != DBNull.Value && dr[5] != DBNull.Value && dr[6] != DBNull.Value && dr[7] != DBNull.Value) - { - //Find min/max from begin/end of the line - double minX; - if (Convert.ToDouble(dr["MinXBegin"]) < Convert.ToDouble(dr["MinXEnd"])) - minX = Convert.ToDouble(dr["MinXBegin"]); - else - minX = Convert.ToDouble(dr["MinXEnd"]); - - double minY; - if (Convert.ToDouble(dr["MinYBegin"]) < Convert.ToDouble(dr["MinYEnd"])) - minY = Convert.ToDouble(dr["MinYBegin"]); - else - minY = Convert.ToDouble(dr["MinYEnd"]); - - double maxX; - if (Convert.ToDouble(dr["MaxXBegin"]) < Convert.ToDouble(dr["MaxXEnd"])) - maxX = Convert.ToDouble(dr["MaxXBegin"]); - else - maxX = Convert.ToDouble(dr["MaxXEnd"]); - - double maxY; - if (Convert.ToDouble(dr["MaxYBegin"]) < Convert.ToDouble(dr["MaxYEnd"])) - maxY = Convert.ToDouble(dr["MaxYBegin"]); - else - maxY = Convert.ToDouble(dr["MaxYEnd"]); - - return new Envelope(new Coordinate(minX, minY), - new Coordinate(maxX, maxY)); - } - } - } - conn.Close(); - } - } - return null; - } - - #region Disposers and finalizers - - #endregion - } -} -#endif +// Copyright 2013 - Lothar Otto (www.sodako.de) +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using System; +using System.Collections.ObjectModel; +using System.Data; +using System.Data.Common; +using GeoAPI.Geometries; + +namespace SharpMap.Data.Providers +{ + /// + /// The XYColumnTwoPointLine provider is used for rendering line data from an ADO.NET compatible data source. + /// + /// + /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, + /// and an integer-type column containing a unique identifier for each row. + /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your data source table. + /// + [Serializable] + public class XYColumnTwoPointLine : PreparedGeometryProvider + { + private string _definitionQuery; + + /// + /// Initializes a new instance of the XYColumnTwoPointLine provider + /// + /// The ADO.NET database provider factory + /// The connection string + /// The name of the table + /// The name of the object id column + /// The name of the x-ordinates column of the beginning of the line + /// The name of the y-ordinates column of the beginning of the line + /// The name of the x-ordinates column of the end of the line + /// The name of the y-ordinates column of the end of the line + public XYColumnTwoPointLine(DbProviderFactory provider, string connectionString, string tableName, string oidColumnName, string xColumnBegin, string yColumnBegin, string xColumnEnd, string yColumnEnd) + { + Table = tableName; + XColumnBegin = xColumnBegin; + YColumnBegin = yColumnBegin; + XColumnEnd = xColumnEnd; + YColumnEnd = yColumnEnd; + ObjectIdColumn = oidColumnName; + DbProvider = provider; + ConnectionString = connectionString; + } + + /// + /// Data table name + /// + public string Table { get; set; } + + + /// + /// Name of column that contains the Object ID + /// + public string ObjectIdColumn { get; set; } + + /// + /// Name of column that contains X coordinate start + /// + public string XColumnBegin { get; set; } + + /// + /// Name of column that contains Y coordinate start + /// + public string YColumnBegin { get; set; } + + /// + /// Name of column that contains X coordinate start + /// + public string XColumnEnd { get; set; } + + /// + /// Name of column that contains Y coordinate start + /// + public string YColumnEnd { get; set; } + + /// + /// Gets or sets a value indicating the connection string + /// + public string ConnectionString + { + get { return ConnectionID; } + set { ConnectionID = value; } + } + + /// + /// Gets or sets an entity decorator. + /// + /// + /// For Access this would e.g. be "[{0}]", for SQLite, Postgres or SqlServer "\"{0}\"" + /// + public string EntityDecorator { get; set; } = "{0}"; + + /// + /// The used to create connections, commands etc. + /// + private DbProviderFactory DbProvider { get; } + + /// + /// Definition query used for limiting data set + /// + public string DefinitionQuery + { + get { return _definitionQuery; } + set { _definitionQuery = value; } + } + + /// + /// Returns geometries within the specified bounding box + /// + /// + /// + public override Collection GetGeometriesInView(Envelope bbox) + { + var features = new Collection(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + //open the connection + conn.Open(); + + var strSQL = "SELECT " + XColumnBegin + ", " + YColumnBegin + ", " + XColumnEnd + ", " + YColumnEnd + " FROM " + Table + " WHERE "; + strSQL += GetDefinitionQueryConstraint(true); + //Limit to the points within the bounding box + strSQL += GetSpatialConstraint(bbox); + + var factory = Factory; + var precisionModel = factory.PrecisionModel; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + while (dr.Read()) + { + if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) + { + var c1 = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); + precisionModel.MakePrecise(c1); + var c2 = new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3])); + precisionModel.MakePrecise(c2); + features.Add(Factory.CreateLineString(new[] { c1, c2 })); + } + } + } + } + } + } + return features; + } + + /// + /// Returns geometry Object IDs whose bounding box intersects 'bbox' + /// + /// + /// + public override Collection GetObjectIDsInView(Envelope bbox) + { + var objectlist = new Collection(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + //open the connection + conn.Open(); + + var strSQL = "SELECT " + ObjectIdColumn + " FROM " + Table + " WHERE "; + + //Limit to the DefinitionQuery + strSQL += GetDefinitionQueryConstraint(true); + + //Limit to the points within the boundingbox + strSQL += GetSpatialConstraint(bbox); + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + while (dr.Read()) + if (!dr.IsDBNull(0)) + objectlist.Add((uint)dr.GetInt32(0)); + } + } + conn.Close(); + } + } + return objectlist; + } + + /// + /// Returns the geometry corresponding to the Object ID + /// + /// Object ID + /// geometry + public override IGeometry GetGeometryByID(uint oid) + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT " + XColumnBegin + ", " + YColumnBegin + ", " + XColumnEnd + ", " + YColumnEnd + " FROM " + Table + " WHERE " + ObjectIdColumn + + "=" + oid.ToString(Map.NumberFormatEnUs); + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + { + if (dr.Read()) + { + //If the read row is OK, create a point geometry from the XColumn and YColumn and return it + if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) + { + + var c1 = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); + Factory.PrecisionModel.MakePrecise(c1); + var c2 = new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3])); + Factory.PrecisionModel.MakePrecise(c2); + return Factory.CreateLineString(new[] { c1, c2 }); + + } + } + } + } + conn.Close(); + } + } + return null; + } + + /// + /// Function to limit the points to the . + /// + /// The spatial predicate bounding box + /// A SQL string limiting the result set based on an Envelope constraint. + private string GetSpatialConstraint(Envelope bbox) + { + return string.Format(Map.NumberFormatEnUs, "NOT ({0} > {1} OR {2} < {3} OR {4} > {5} OR {6} < {7})", + bbox.MinX, GetMaxSql(ToEntity(XColumnBegin), ToEntity(XColumnEnd)), + bbox.MaxX, GetMinSql(ToEntity(XColumnBegin), ToEntity(XColumnEnd)), + bbox.MinY, GetMaxSql(ToEntity(YColumnBegin), ToEntity(YColumnEnd)), + bbox.MaxY, GetMinSql(ToEntity(YColumnBegin), ToEntity(YColumnEnd))); + } + + /// + /// Function to build a Max function to return the maximum value of two column entities + /// + /// The first column entity + /// The second column entity + /// An SQL CASE string to mimic + private string GetMaxSql(string entity1, string entity2) + { + return $"(CASE WHEN {entity1} >= {entity2} THEN {entity1} ELSE {entity2} END)"; + } + + /// + /// Function to build a Min function to return the maximum value of two column entities + /// + /// The first column entity + /// The second column entity + /// An SQL CASE string to mimic + private string GetMinSql(string entity1, string entity2) + { + return $"(CASE WHEN {entity1} <= {entity2} THEN {entity1} ELSE {entity2} END)"; + } + + /// + /// Function to properly decorate a database entity e.g. (table-, query- or column name) + /// + /// The name or the database entity + /// The decorated entity + private string ToEntity(string name) + { + return string.Format(EntityDecorator, name); + } + + /// + /// Function to limit the features based on + /// + /// Defines if " AND " should be appended. + /// A SQL string limiting the resultset, if desired. + private string GetDefinitionQueryConstraint(bool addAnd) + { + var addAndText = addAnd ? " AND" : string.Empty; + if (!string.IsNullOrEmpty(_definitionQuery)) + return string.Format("{0}{1} ", _definitionQuery, addAndText); + return string.Empty; + } + + /// + /// Returns all features with the view box + /// + /// view box + /// FeatureDataSet to fill data into + public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) + { + //List features = new List(); + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT * FROM " + Table + " WHERE "; + //If a definition query has been specified, add this as a filter on the query + strSQL += GetDefinitionQueryConstraint(true); + + //Limit to the points within the boundingbox + strSQL += GetSpatialConstraint(bbox); + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = strSQL; + + using (var reader = cmd.ExecuteReader()) + { + if (reader == null) + throw new InvalidOperationException(); + + //Set up result table + var fdt = new FeatureDataTable(); + fdt.TableName = Table; + for (var c = 0; c < reader.FieldCount; c++) + { + var fieldType = reader.GetFieldType(c); + if (fieldType == null) + throw new Exception("Failed to retrieve field type for column: " + c); + fdt.Columns.Add(reader.GetName(c), fieldType); + } + + var dataTransfer = new object[reader.FieldCount]; + + //Get factory and precision model + var factory = Factory; + var pm = factory.PrecisionModel; + + fdt.BeginLoadData(); + while (reader.Read()) + { + var count = reader.GetValues(dataTransfer); + System.Diagnostics.Debug.Assert(count == dataTransfer.Length); + + var fdr = (FeatureDataRow)fdt.LoadDataRow(dataTransfer, true); + var c1 = new Coordinate(Convert.ToDouble(fdr[XColumnBegin]), Convert.ToDouble(fdr[YColumnBegin])); + pm.MakePrecise(c1); + var c2 = new Coordinate(Convert.ToDouble(fdr[XColumnEnd]), Convert.ToDouble(fdr[YColumnEnd])); + pm.MakePrecise(c2); + fdr.Geometry = Factory.CreateLineString(new[] { c1, c2 }); + } + fdt.EndLoadData(); + + ds.Tables.Add(fdt); + } + } + } + } + + /// + /// Returns the number of features in the dataset + /// + /// Total number of features + public override int GetFeatureCount() + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + + var strSQL = "SELECT Count(*) FROM " + Table; + if (!String.IsNullOrEmpty(_definitionQuery)) + //If a definition query has been specified, add this as a filter on the query + strSQL += " WHERE " + _definitionQuery; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + return Convert.ToInt32(command.ExecuteScalar()); + } + } + } + + /// + /// Returns a datarow based on a RowID + /// + /// + /// datarow + public override FeatureDataRow GetFeature(uint rowId) + { + using (var conn = DbProvider.CreateConnection()) + { + var strSQL = "SELECT * FROM " + Table + " WHERE " + ObjectIdColumn + "=" + rowId.ToString(Map.NumberFormatEnUs); + + conn.ConnectionString = ConnectionString; + conn.Open(); + + using (var selectCommand = conn.CreateCommand()) + { + selectCommand.CommandText = strSQL; + + using (var adapter = DbProvider.CreateDataAdapter()) + { + adapter.SelectCommand = selectCommand; + + var ds = new DataSet(); + adapter.Fill(ds); + conn.Close(); + if (ds.Tables.Count > 0) + { + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (DataColumn col in ds.Tables[0].Columns) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + if (ds.Tables[0].Rows.Count > 0) + { + var dr = ds.Tables[0].Rows[0]; + var fdr = fdt.NewRow(); + foreach (DataColumn col in ds.Tables[0].Columns) + fdr[col.Ordinal] = dr[col]; + if (dr[XColumnBegin] != DBNull.Value && dr[YColumnBegin] != DBNull.Value && dr[XColumnEnd] != DBNull.Value && dr[YColumnEnd] != DBNull.Value) + fdr.Geometry = Factory.CreateLineString(new[] { new Coordinate((double)dr[XColumnBegin], (double)dr[YColumnBegin]), new Coordinate((double)dr[XColumnEnd], (double)dr[YColumnEnd]) }); + + return fdr; + } + return null; + } + return null; + } + } + } + } + + /// + /// Function to return the of dataset + /// + /// The extent of the dataset + public override Envelope GetExtents() + { + using (var conn = DbProvider.CreateConnection()) + { + conn.ConnectionString = ConnectionString; + + conn.Open(); + var strSQL = "SELECT Min(" + XColumnBegin + ") as MinXBegin, Min(" + YColumnBegin + ") As MinYBegin, " + + "Max(" + XColumnBegin + ") As MaxXBegin, Max(" + YColumnBegin + ") As MaxYBegin, " + + "Min(" + XColumnEnd + ") as MinXEnd, Min(" + YColumnEnd + ") As MinYEnd, " + + "Max(" + XColumnEnd + ") As MaxXEnd, Max(" + YColumnEnd + ") As MaxYEnd " + + " FROM " + Table; + + //If a definition query has been specified, add this as a filter on the query + if (!String.IsNullOrEmpty(_definitionQuery)) + strSQL += " WHERE " + _definitionQuery; + + using (var command = conn.CreateCommand()) + { + command.CommandText = strSQL; + + using (var dr = command.ExecuteReader()) + { + if (dr != null && dr.HasRows) + if (dr.Read()) + { + //If the read row is OK, create a point geometry from the XColumn and YColumn and return it + if (dr[0] != DBNull.Value && dr[1] != DBNull.Value && dr[2] != DBNull.Value && dr[3] != DBNull.Value + && dr[4] != DBNull.Value && dr[5] != DBNull.Value && dr[6] != DBNull.Value && dr[7] != DBNull.Value) + { + //Find min/max from begin/end of the line + double minX; + if (Convert.ToDouble(dr["MinXBegin"]) < Convert.ToDouble(dr["MinXEnd"])) + minX = Convert.ToDouble(dr["MinXBegin"]); + else + minX = Convert.ToDouble(dr["MinXEnd"]); + + double minY; + if (Convert.ToDouble(dr["MinYBegin"]) < Convert.ToDouble(dr["MinYEnd"])) + minY = Convert.ToDouble(dr["MinYBegin"]); + else + minY = Convert.ToDouble(dr["MinYEnd"]); + + double maxX; + if (Convert.ToDouble(dr["MaxXBegin"]) > Convert.ToDouble(dr["MaxXEnd"])) + maxX = Convert.ToDouble(dr["MaxXBegin"]); + else + maxX = Convert.ToDouble(dr["MaxXEnd"]); + + double maxY; + if (Convert.ToDouble(dr["MaxYBegin"]) > Convert.ToDouble(dr["MaxYEnd"])) + maxY = Convert.ToDouble(dr["MaxYBegin"]); + else + maxY = Convert.ToDouble(dr["MaxYEnd"]); + + return new Envelope(new Coordinate(minX, minY), + new Coordinate(maxX, maxY)); + } + } + } + conn.Close(); + } + } + return null; + } + + #region Disposers and finalizers + + #endregion + } +} diff --git a/SharpMap/Data/Providers/OleDbPoint.cs b/SharpMap/Data/Providers/OleDbPoint.cs index eba8d951..327e8dfc 100644 --- a/SharpMap/Data/Providers/OleDbPoint.cs +++ b/SharpMap/Data/Providers/OleDbPoint.cs @@ -17,390 +17,33 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA using System; -using System.Collections.ObjectModel; -using System.Data; using System.Data.OleDb; -using GeoAPI.Geometries; namespace SharpMap.Data.Providers { /// - /// The OleDbPoint provider is used for rendering point data from an OleDb compatible datasource. + /// The OleDbPoint provider is used for rendering point data from an OleDb compatible data source. /// /// /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, /// and an integer-type column containing a unique identifier for each row. - /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your datasource table. + /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your data source table. /// [Serializable] - public class OleDbPoint : PreparedGeometryProvider + public class OleDbPoint : DbPoint { - private string _definitionQuery; - /// /// Initializes a new instance of the OleDbPoint provider /// - /// The connection string - /// The name of the table + /// The connection string + /// The name of the table /// The name of the object id column /// The name of the x-ordinates column /// The name of the y-ordinates column - public OleDbPoint(string connectionStr, string tablename, string oidColumnName, string xColumn, string yColumn) + public OleDbPoint(string connectionString, string tableName, string oidColumnName, string xColumn, string yColumn) + : base(OleDbFactory.Instance, connectionString, tableName, oidColumnName, xColumn, yColumn) { - Table = tablename; - XColumn = xColumn; - YColumn = yColumn; - ObjectIdColumn = oidColumnName; - ConnectionString = connectionStr; } - - /// - /// Data table name - /// - public string Table { get; set; } - - - /// - /// Name of column that contains the Object ID - /// - public string ObjectIdColumn { get; set; } - - /// - /// Name of column that contains X coordinate - /// - public string XColumn { get; set; } - - /// - /// Name of column that contains Y coordinate - /// - public string YColumn { get; set; } - - /// - /// Connectionstring - /// - public string ConnectionString - { - get { return ConnectionID; } - set { ConnectionID = value; } - } - - /// - /// Definition query used for limiting dataset - /// - public string DefinitionQuery - { - get { return _definitionQuery; } - set { _definitionQuery = value; } - } - - /// - /// Returns geometries within the specified bounding box - /// - /// - /// - public override Collection GetGeometriesInView(Envelope bbox) - { - var features = new Collection(); - using (var conn = new OleDbConnection(ConnectionString)) - { - //open the connection - conn.Open(); - - var strSQL = "SELECT " + XColumn + ", " + YColumn + " FROM " + Table + " WHERE "; - strSQL += GetDefinitionQueryConstraint(true); - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - var factory = Factory; - var precisionModel = factory.PrecisionModel; - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - while (dr.Read()) - { - if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) - { - var c = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); - precisionModel.MakePrecise(c); - features.Add(factory.CreatePoint(c)); - } - } - } - } - } - } - return features; - } - - /// - /// Returns geometry Object IDs whose bounding box intersects 'bbox' - /// - /// - /// - public override Collection GetObjectIDsInView(Envelope bbox) - { - var objectlist = new Collection(); - using (var conn = new OleDbConnection(ConnectionString)) - { - //open the connection - conn.Open(); - - var strSQL = "SELECT " + ObjectIdColumn + " FROM " + Table + " WHERE "; - - //Limit to the DefinitionQuery - strSQL += GetDefinitionQueryConstraint(true); - - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - while (dr.Read()) - if (!dr.IsDBNull(0)) - objectlist.Add(Convert.ToUInt32(dr.GetValue(0))); - } - } - conn.Close(); - } - } - return objectlist; - } - - /// - /// Returns the geometry corresponding to the Object ID - /// - /// Object ID - /// geometry - public override IGeometry GetGeometryByID(uint oid) - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT " + XColumn + ", " + YColumn + " FROM " + Table + " WHERE " + ObjectIdColumn + - "=" + oid.ToString(Map.NumberFormatEnUs); - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows) - { - if (dr.Read()) - { - //If the read row is OK, create a point geometry from the XColumn and YColumn and return it - if (!(dr.IsDBNull(0) || dr.IsDBNull(1))) - { - var c = new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])); - Factory.PrecisionModel.MakePrecise(c); - return Factory.CreatePoint(c); - } - } - } - } - conn.Close(); - } - } - return null; - } - - /// - /// Function to limit the points to the . - /// - /// The spatial predicate bounding box - /// A SQL string limiting the resultset based on an Envelope constraint. - private string GetSpatialConstraint(Envelope bbox) - { - return string.Format(Map.NumberFormatEnUs, "({0} BETWEEN {1} AND {2}) AND ({3} BETWEEN {4} AND {5})", - XColumn, bbox.MinX, bbox.MaxX, - YColumn, bbox.MinY, bbox.MaxY); - /* - return "(" + XColumn + " BETWEEN " + bbox.Left().ToString(Map.NumberFormatEnUs) + " AND " + bbox.Right().ToString(Map.NumberFormatEnUs) + ") AND " + - "(" + YColumn + " BETWEEN " + bbox.Bottom().ToString(Map.NumberFormatEnUs) + " AND " + bbox.Top().ToString(Map.NumberFormatEnUs) + ")"; - */ - } - - /// - /// Function to limit the features based on - /// - /// Defines if " AND " should be appended. - /// A SQL string limiting the resultset, if desired. - private string GetDefinitionQueryConstraint(bool addAnd) - { - var addAndText = addAnd ? " AND" : string.Empty; - if (!string.IsNullOrEmpty(_definitionQuery)) - return string.Format("{0}{1} ", _definitionQuery, addAndText); - return string.Empty; - } - - /// - /// Returns all features with the view box - /// - /// view box - /// FeatureDataSet to fill data into - public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) - { - //List features = new List(); - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT * FROM " + Table + " WHERE "; - //If a definition query has been specified, add this as a filter on the query - strSQL += GetDefinitionQueryConstraint(true); - - //Limit to the points within the boundingbox - strSQL += GetSpatialConstraint(bbox); - - using (var cmd = new OleDbCommand(strSQL, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - if (reader == null) - throw new InvalidOperationException(); - - //Set up result table - var fdt = new FeatureDataTable(); - fdt.TableName = Table; - for (var c = 0; c < reader.FieldCount; c++) - { - var fieldType = reader.GetFieldType(c); - if (fieldType == null) - throw new Exception("Failed to retrieve field type for column: " + c); - fdt.Columns.Add(reader.GetName(c), fieldType); - } - - var dataTransfer = new object[reader.FieldCount]; - - //Get factory and precision model - var factory = Factory; - var pm = factory.PrecisionModel; - - fdt.BeginLoadData(); - while (reader.Read()) - { - var count = reader.GetValues(dataTransfer); - System.Diagnostics.Debug.Assert(count == dataTransfer.Length); - - var fdr = (FeatureDataRow) fdt.LoadDataRow(dataTransfer, true); - var c = new Coordinate(Convert.ToDouble(fdr[XColumn]), Convert.ToDouble(fdr[YColumn])); - pm.MakePrecise(c); - fdr.Geometry = Factory.CreatePoint(c); - } - fdt.EndLoadData(); - - ds.Tables.Add(fdt); - } - } - } - } - - /// - /// Returns the number of features in the dataset - /// - /// Total number of features - public override int GetFeatureCount() - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - - var strSQL = "SELECT Count(*) FROM " + Table; - if (!String.IsNullOrEmpty(_definitionQuery)) - //If a definition query has been specified, add this as a filter on the query - strSQL += " WHERE " + _definitionQuery; - - return (int)new OleDbCommand(strSQL, conn).ExecuteScalar(); - } - } - - /// - /// Returns a datarow based on a RowID - /// - /// - /// datarow - public override FeatureDataRow GetFeature(uint rowId) - { - using (var conn = new OleDbConnection(ConnectionString)) - { - var strSQL = "SELECT * FROM " + Table + " WHERE " + ObjectIdColumn + "=" + rowId.ToString(Map.NumberFormatEnUs); - conn.Open(); - - using (var adapter = new OleDbDataAdapter(strSQL, conn)) - { - var ds = new DataSet(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (DataColumn col in ds.Tables[0].Columns) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - if (ds.Tables[0].Rows.Count > 0) - { - var dr = ds.Tables[0].Rows[0]; - var fdr = fdt.NewRow(); - foreach (DataColumn col in ds.Tables[0].Columns) - fdr[col.Ordinal] = dr[col]; - if (dr[XColumn] != DBNull.Value && dr[YColumn] != DBNull.Value) - fdr.Geometry = - Factory.CreatePoint(new Coordinate((double) dr[XColumn], (double) dr[YColumn])); - return fdr; - } - return null; - } - return null; - } - } - } - - /// - /// Function to return the of dataset - /// - /// The extent of the dataset - public override Envelope GetExtents() - { - using (var conn = new OleDbConnection(ConnectionString)) - { - conn.Open(); - var strSQL = "SELECT Min(" + XColumn + ") as MinX, Min(" + YColumn + ") As MinY, " + - "Max(" + XColumn + ") As MaxX, Max(" + YColumn + ") As MaxY FROM " + Table; - - //If a definition query has been specified, add this as a filter on the query - if (!String.IsNullOrEmpty(_definitionQuery)) - strSQL += " WHERE " + _definitionQuery; - - using (var command = new OleDbCommand(strSQL, conn)) - { - using (var dr = command.ExecuteReader()) - { - if (dr != null && dr.HasRows ) - if (dr.Read()) - { - //If the read row is OK, create a point geometry from the XColumn and YColumn and return it - if (dr[0] != DBNull.Value && dr[1] != DBNull.Value && dr[2] != DBNull.Value && - dr[3] != DBNull.Value) - return new Envelope(new Coordinate(Convert.ToDouble(dr[0]), Convert.ToDouble(dr[1])), - new Coordinate(Convert.ToDouble(dr[2]), Convert.ToDouble(dr[3]))); - } - } - conn.Close(); - } - } - return null; - } - - #region Disposers and finalizers - - #endregion } } #endif diff --git a/UnitTests/Data/Providers/DbPointProviderTest.cs b/UnitTests/Data/Providers/DbPointProviderTest.cs new file mode 100644 index 00000000..a7f70c76 --- /dev/null +++ b/UnitTests/Data/Providers/DbPointProviderTest.cs @@ -0,0 +1,188 @@ +using System; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap.Data; +using SharpMap.Data.Providers; + +namespace UnitTests.Data.Providers +{ + [Category("RequiresWindows")] + public class XYColumnPointProviderTest : ProviderTest + { + private System.Data.Common.DbConnection _connection; // Keep connection active; when closed, the in-memory database is dropped + + public override void TestFixtureSetup() + { + base.TestFixtureSetup(); + _connection = WriteSqlLite(); + } + + private static System.Data.Common.DbConnection WriteSqlLite() + { + // Set up sample table + var conn = System.Data.SQLite.SQLiteFactory.Instance.CreateConnection(); + + conn.ConnectionString = "FullUri=file::memory:?cache=shared;ToFullPath=false"; + conn.Open(); + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = + "CREATE TABLE XYColumnPointProviderTest(ID integer primary key, Name text, X real, Y real);"; + cmd.ExecuteNonQuery(); + } + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = + "INSERT INTO XYColumnPointProviderTest(ID, Name, X, Y) VALUES" + + " (1, 'One', 429012.5, 360443.18)," + + " (2, 'Two', 429001.59, 360446.98)," + + " (3, 'Three', 429003.31, 360425.45)," + + " (4, 'Four', 429016.9, 360413.04)"; + cmd.ExecuteNonQuery(); + } + + return conn; + } + + [TestFixtureTearDown] + public void TearDownTestFixture() + { + _connection.Close(); + } + + private DbPoint CreateProvider() + { + var p = new DbPoint(System.Data.SQLite.SQLiteFactory.Instance, + "FullUri=file::memory:?cache=shared;ToFullPath=false", "XYColumnPointProviderTest", "ID", "X", "Y"); + + return p; + + } + + [Test] + public void TestGetExtents() + { + using (var p = CreateProvider()) + { + Envelope env = null; + Assert.DoesNotThrow(() => env = p.GetExtents()); + Assert.IsNotNull(env); + Assert.IsFalse(env.IsNull); + } + } + + [Test] + public void TestGetFeatureCount() + { + using (var p = CreateProvider()) + { + var numFeatures = 0; + Assert.DoesNotThrow(() => numFeatures = p.GetFeatureCount()); + Assert.AreEqual(4, numFeatures); + p.DefinitionQuery = "Name='Two'"; + Assert.DoesNotThrow(() => numFeatures = p.GetFeatureCount()); + Assert.AreEqual(1, numFeatures); + } + } + + [Test] + public void TestGetFeature() + { + using (var p = CreateProvider()) + { + FeatureDataRow feature = null; + Assert.DoesNotThrow(() => feature = p.GetFeature(3)); + Assert.IsNotNull(feature); + Assert.AreEqual(3, Convert.ToInt32(feature[p.ObjectIdColumn])); + Assert.AreEqual(feature.Geometry.Centroid.Coordinate, + new Coordinate(429003.31, 360425.45)); + } + } + + [Test] + public void TestGetGeometryById() + { + using (var p = CreateProvider()) + { + IGeometry feature = null; + Assert.DoesNotThrow(() => feature = p.GetGeometryByID(3)); + Assert.IsNotNull(feature); + Assert.AreEqual(feature.Centroid.Coordinate, + new Coordinate(429003.31, 360425.45)); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelope() + { + using (var p = CreateProvider()) + { + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(p.GetExtents(), fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(4, table.Rows.Count); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelopeEqualsGetOidsInView() + { + using (var p = CreateProvider()) + { + var ext =p.GetExtents(); + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(ext, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(4, table.Rows.Count); + + var oids = p.GetObjectIDsInView(ext); + + Assert.AreEqual(table.Rows.Count, oids.Count); + foreach (FeatureDataRow row in table.Select()) + Assert.IsTrue(oids.Contains(Convert.ToUInt32(row[0]))); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelopeEqualsGetGeometriesInView() + { + using (var p = CreateProvider()) + { + var ext = p.GetExtents(); + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(ext, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(4, table.Rows.Count); + + var geoms = p.GetGeometriesInView(ext); + + Assert.AreEqual(table.Rows.Count, geoms.Count); + foreach (FeatureDataRow row in table.Select()) + Assert.IsTrue(geoms.Contains(row.Geometry)); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstGeometry() + { + using (var p = CreateProvider()) + { + var reader = new NetTopologySuite.IO.WKTReader(); + var poly = reader.Read( + @"POLYGON ((428999.76819468878 360451.93329044303, 428998.25517286535 360420.80827007542, +429023.1119599645 360406.75878171506, 429004.52340613387 360451.71714446822, +429004.52340613387 360451.71714446822, 428999.76819468878 360451.93329044303))"); + + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(poly, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(3, table.Rows.Count); + } + } + } +} diff --git a/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs b/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs new file mode 100644 index 00000000..f0113424 --- /dev/null +++ b/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs @@ -0,0 +1,213 @@ +using System; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap.Data; +using SharpMap.Data.Providers; + +namespace UnitTests.Data.Providers +{ + [Category("RequiresWindows")] + public class DbTwoPointLineProviderTest : ProviderTest + { + private System.Data.Common.DbConnection _connection; // Keep connection active; when closed, the in-memory database is dropped + + public override void TestFixtureSetup() + { + base.TestFixtureSetup(); + _connection = WriteSqlLite(); + } + + private static System.Data.Common.DbConnection WriteSqlLite() + { + // Set up sample table + var conn = System.Data.SQLite.SQLiteFactory.Instance.CreateConnection(); + + conn.ConnectionString = "FullUri=file::memory:?cache=shared;ToFullPath=false"; + conn.Open(); + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = + "CREATE TABLE XYColumnTwoPointLineProviderTest(ID integer primary key, Name text, X1 real, Y1 real, X2 real, Y2 real);"; + cmd.ExecuteNonQuery(); + } + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = + "INSERT INTO XYColumnTwoPointLineProviderTest(ID, Name, X1, Y1, X2, Y2) VALUES" + + " (1, 'T1', 100, 100, 170, 100)," + + " (2, 'T2', 135, 100, 135, 170)," + + " (3, 'e1', 180, 130, 180, 170)," + + " (4, 'e2', 180, 130, 210, 130)," + + " (5, 'e3', 180, 150, 200, 150)," + + " (6, 'e4', 180, 170, 210, 170)," + + " (7, 's1', 220, 130, 250, 130)," + + " (8, 's2', 220, 130, 220, 150)," + + " (9, 's3', 220, 150, 250, 150)," + + " (10, 's4', 250, 150, 250, 170)," + + " (11, 's5', 250, 170, 220, 170)," + + " (12, 't1', 260, 130, 290, 130)," + + " (13, 't2', 275, 130, 275, 170)"; + cmd.ExecuteNonQuery(); + } + + return conn; + } + + [TestFixtureTearDown] + public void TearDownTestFixture() + { + _connection.Close(); + } + + private XYColumnTwoPointLine CreateProvider() + { + var p = new XYColumnTwoPointLine(System.Data.SQLite.SQLiteFactory.Instance, + "FullUri=file::memory:?cache=shared;ToFullPath=false", "XYColumnTwoPointLineProviderTest", "ID", "X1", "Y1", "X2", "Y2"); + + return p; + + } + + [Test] + public void TestGetExtents() + { + using (var p = CreateProvider()) + { + Envelope env = null; + Assert.DoesNotThrow(() => env = p.GetExtents()); + Assert.IsNotNull(env); + Assert.IsFalse(env.IsNull); + } + } + + [Test] + public void TestGetFeatureCount() + { + using (var p = CreateProvider()) + { + var numFeatures = 0; + Assert.DoesNotThrow(() => numFeatures = p.GetFeatureCount()); + Assert.AreEqual(13, numFeatures); + p.DefinitionQuery = "Name='e1'"; + Assert.DoesNotThrow(() => numFeatures = p.GetFeatureCount()); + Assert.AreEqual(1, numFeatures); + } + } + + [Test] + public void TestGetFeature() + { + using (var p = CreateProvider()) + { + FeatureDataRow feature = null; + Assert.DoesNotThrow(() => feature = p.GetFeature(3)); + Assert.IsNotNull(feature); + Assert.AreEqual(3, Convert.ToInt32(feature[p.ObjectIdColumn])); + Assert.AreEqual(feature.Geometry.Centroid.Coordinate, + new Coordinate(180, 150)); + } + } + + [Test] + public void TestGetGeometryById() + { + using (var p = CreateProvider()) + { + IGeometry feature = null; + Assert.DoesNotThrow(() => feature = p.GetGeometryByID(3)); + Assert.IsNotNull(feature); + Assert.AreEqual(feature.Centroid.Coordinate, + new Coordinate(180, 150)); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelope() + { + using (var p = CreateProvider()) + { + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(p.GetExtents(), fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(13, table.Rows.Count); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelopeEqualsGetOidsInView() + { + using (var p = CreateProvider()) + { + var ext =p.GetExtents(); + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(ext, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(13, table.Rows.Count); + + var oids = p.GetObjectIDsInView(ext); + + Assert.AreEqual(table.Rows.Count, oids.Count); + foreach (FeatureDataRow row in table.Select()) + Assert.IsTrue(oids.Contains(Convert.ToUInt32(row[0]))); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstEnvelopeEqualsGetGeometriesInView() + { + using (var p = CreateProvider()) + { + var ext = p.GetExtents(); + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(ext, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(13, table.Rows.Count); + + var geoms = p.GetGeometriesInView(ext); + + Assert.AreEqual(table.Rows.Count, geoms.Count); + foreach (FeatureDataRow row in table.Select()) + Assert.IsTrue(geoms.Contains(row.Geometry)); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstGeometry() + { + using (var p = CreateProvider()) + { + var reader = new NetTopologySuite.IO.WKTReader(); + var poly = reader.Read( + @"POLYGON ((100 100, 170 100, 170 170, 100 170, 100 100))"); + + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(poly, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(2, table.Rows.Count); + } + } + + [Test] + public void TestExecuteIntersectionQueryAgainstGeometryIntersectionButNoPointsWithin() + { + using (var p = CreateProvider()) + { + var reader = new NetTopologySuite.IO.WKTReader(); + var poly = reader.Read( + @"POLYGON ((101 101, 169 101, 169 169, 101 169, 101 101))"); + + var fds = new FeatureDataSet(); + Assert.DoesNotThrow(() => p.ExecuteIntersectionQuery(poly, fds)); + Assert.AreEqual(1, fds.Tables.Count); + var table = fds.Tables[0]; + Assert.AreEqual(1, table.Rows.Count); + Assert.AreEqual("T2", table.Rows[0][1].ToString()); + } + } + } +} diff --git a/UnitTests/Data/Providers/OleDbPointProviderTest.cs b/UnitTests/Data/Providers/OleDbPointProviderTest.cs index 8d3e76e5..86be3559 100644 --- a/UnitTests/Data/Providers/OleDbPointProviderTest.cs +++ b/UnitTests/Data/Providers/OleDbPointProviderTest.cs @@ -12,6 +12,19 @@ public class OleDbPointProviderTest : ProviderTest public override void TestFixtureSetup() { base.TestFixtureSetup(); + + // Check if the OLE DB provider is available + Microsoft.Win32.RegistryKey registryKey = + Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Properties.Settings.Default.OleDbProvider); + if (registryKey != null) + { + registryKey.Close(); + } + else + { + Assert.Ignore("OLE DB provider " + Properties.Settings.Default.OleDbProvider + " is not found."); + } + _tableName = WriteCsv(); } @@ -179,4 +192,4 @@ public void TestExecuteIntersectionQueryAgainstGeometry() } } } -} \ No newline at end of file +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 8efec657..c91808ea 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -165,6 +165,8 @@ + + @@ -369,4 +371,4 @@ - + \ No newline at end of file From db7209226624f9757e74a5a405f7e223f6d7a91a Mon Sep 17 00:00:00 2001 From: terribletim Date: Mon, 29 Oct 2018 14:34:23 +0700 Subject: [PATCH 063/186] Mapbox mouse actions (#107) * Fix issues related to locking on Map.MapTransform * Add MapTransformRotation property * Rename _dragStartCoord to _dragStartCenter * Resolve mouse pan and Map.Envelope with MapTransform != Matrix.Identity * Improve zoom by MouseWheel Closes #106 --- SharpMap.UI/Forms/MapBox.cs | 130 ++++++++++++++++++------- SharpMap/Map/Map.cs | 126 +++++++++++++----------- SharpMap/Map/MapViewport.cs | 2 +- UnitTests/MapTest.cs | 187 +++++++++++++++++++++++++++++++----- 4 files changed, 328 insertions(+), 117 deletions(-) diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index 9433a48b..6e351cc8 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -1426,37 +1426,58 @@ protected override void OnMouseWheel(MouseEventArgs e) return; } - /* TODO: - * Think of logic that does not change center to rescale as this leads to - * three (3) Map.ZoomChanged events - */ - - //If zoomToPointer is set, we first need to center the map around the mouse-location - //Then Zoom in the map - //Then pan the map back to it's original shift to have it still centered simultanously var oldCenter = _map.Center; - - if (_zoomToPointer) - _map.Center = _map.ImageToWorld(new PointF(e.X, e.Y), true); + var oldZoom = _map.Zoom; + var oldHeight = _map.MapHeight; var scale = (e.Delta / 120.0); var scaleBase = 1 + (_wheelZoomMagnitude/(10*(IsControlPressed ? _fineZoomFactor : 1))); - var oldZoom = _map.Zoom; - _map.Zoom = oldZoom * Math.Pow(scaleBase, scale); - - //If zoomtoPointer, move the map back to MousePointer is over same place - if (_zoomToPointer) + if (!ZoomToPointer) + // zoom in/out maintaining existing centre + _map.Zoom = oldZoom * Math.Pow(scaleBase, scale); + else { - var newCenterX = (Width/2f) + (Width/2f - e.X); - var newCenterY = (Height/2f) + (Height/2f - e.Y); + // preserve MAP cursor posn + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); + + System.Drawing.Drawing2D.Matrix transform = new System.Drawing.Drawing2D.Matrix(); + transform.Translate((float)-p.X, (float)-p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); + transform.Scale((float)Math.Pow(scaleBase, scale), (float)Math.Pow(scaleBase, scale), System.Drawing.Drawing2D.MatrixOrder.Append); + transform.Translate((float)p.X, (float)p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); + + // NB zoom is independent of MapTransform. + var pts = new[] { new PointF((float)oldCenter.X, (float)oldCenter.Y), + new PointF((float)(oldCenter.X - 0.5 * oldZoom), (float)(oldCenter.Y - 0.5 * oldHeight)), + new PointF((float)(oldCenter.X + 0.5 * oldZoom), (float)(oldCenter.Y + 0.5 * oldHeight)) + }; + transform.TransformPoints(pts); + transform.Dispose(); + + // Subject to creep when map is rotated, but significant improvement over previous implementation + var newCenter = new Coordinate(pts[0].X, pts[0].Y); + var newZoom = pts[2].X - pts[1].X; + var box = new Envelope(pts[1].X, pts[2].X, pts[1].Y, pts[2].Y); + + //pre-checks to prevent mapViewPortGuard from adjusting centre upon reaching max extents + if (newZoom < _map.MinimumZoom || newZoom > _map.MaximumZoom) + return; + + if (_map.EnforceMaximumExtents && !_map.MaximumExtents.IsNull && !_map.MaximumExtents.Contains(box)) + return; + + //_map.Center = newCenter; + //_map.Zoom = newZoom; + + // more efficient that Center + Zoom + _map.ZoomToBox(box); - _map.Center = _map.ImageToWorld(new PointF(newCenterX, newCenterY), true); - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) - { - Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); - OnMapCenterChanged(_map.Center); - } + } + + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) + { + Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); + OnMapCenterChanged(_map.Center); } if (Math.Abs(_map.Zoom - oldZoom) > PrecisionTolerance) @@ -1494,7 +1515,8 @@ private void TimerUpdate(object state, System.Timers.ElapsedEventArgs args) } } - private Coordinate _dragStartCoord; + private Coordinate _dragStartCenter; + private System.Drawing.Drawing2D.Matrix _dragTransform; private double _orgScale; /// @@ -1513,7 +1535,7 @@ protected override void OnMouseDown(MouseEventArgs e) return; // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y)); + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); // Raise event if (MouseDown != null) @@ -1535,7 +1557,22 @@ protected override void OnMouseDown(MouseEventArgs e) { _dragStartPoint = e.Location; _dragEndPoint = e.Location; - _dragStartCoord = _map.Center; + _dragStartCenter = _map.Center; + + _dragTransform = new System.Drawing.Drawing2D.Matrix(); + _dragTransform.Translate(-e.X, -e.Y); + _dragTransform.Scale(1f, -1f, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis + if (_map.MapTransformRotation == 0) + _dragTransform.Scale((float)_map.PixelWidth, (float)_map.PixelHeight, System.Drawing.Drawing2D.MatrixOrder.Append); + else + { + _dragTransform.Rotate(_map.MapTransformRotation, System.Drawing.Drawing2D.MatrixOrder.Append); + // must derive scale for rotated maps, as "Zoom" is based upon non-rotated width + var env = _map.Envelope; + _dragTransform.Scale((float)(env.Width / Width), (float)(env.Width / Width / _map.PixelAspectRatio), System.Drawing.Drawing2D.MatrixOrder.Append); + } + _dragTransform.Translate((float)p.X, (float)p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); + _orgScale = _map.Zoom; } } @@ -1597,7 +1634,7 @@ protected override void OnMouseMove(MouseEventArgs e) } // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y)); + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); // Raise event if (MouseMove != null) @@ -1666,13 +1703,22 @@ protected override void OnMouseMove(MouseEventArgs e) if (isPanOperation) { _dragEndPoint = ClipPoint(e.Location); - if (_dragStartCoord != null) + if (_dragStartCenter != null) { var oldCenter = _map.Center; - _map.Center = - new Coordinate(_dragStartCoord.X - _map.PixelSize*(_dragEndPoint.X - _dragStartPoint.X), - _dragStartCoord.Y - _map.PixelSize*(_dragStartPoint.Y - _dragEndPoint.Y)); + var pts = new[] { new System.Drawing.PointF(_dragStartPoint.X, _dragStartPoint.Y), + new System.Drawing.PointF(_dragEndPoint.X, _dragEndPoint.Y) //, + //new System.Drawing.PointF(Width/2f, Height/2f) + }; + + _dragTransform.TransformPoints(pts); + + var dX = (pts[1].X - pts[0].X); + var dY = (pts[1].Y - pts[0].Y); + + _map.Center = new Coordinate(_dragStartCenter.X - dX, _dragStartCenter.Y - dY); + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) { OnMapCenterChanged(_map.Center); @@ -1964,7 +2010,14 @@ protected override void OnPaint(PaintEventArgs pe) var imageEnvelope = _miRenderer.ImageEnvelope; if (_map.Envelope.Equals(imageEnvelope)) pe.Graphics.DrawImageUnscaled(image, 0, 0); - else { + else if (_activeTool == Tools.Pan) + { + var dX = (_dragEndPoint.X - _dragStartPoint.X); + var dY = (_dragEndPoint.Y - _dragStartPoint.Y); + pe.Graphics.DrawImageUnscaled(image, dX, dY); + } + else + { var ul = _map.WorldToImage(imageEnvelope.TopLeft()); var lr = _map.WorldToImage(imageEnvelope.BottomRight()); pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); @@ -2076,7 +2129,7 @@ protected override void OnMouseUp(MouseEventArgs e) return; // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y)); + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); // Raise event if (MouseUp != null) @@ -2171,7 +2224,7 @@ protected override void OnMouseUp(MouseEventArgs e) { if (_dragging) { - if (_dragStartCoord == null || !_dragStartCoord.Equals2D(_map.Center, PrecisionTolerance)) + if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) { needToRefresh = true; OnMapCenterChanged(_map.Center); @@ -2183,7 +2236,7 @@ protected override void OnMouseUp(MouseEventArgs e) if (_panOnClick) { var oldValue = _map.Center; - _map.Center = _map.ImageToWorld(new Point(e.X, e.Y)); + _map.Center = p; if (!_map.Center.Equals2D(oldValue, PrecisionTolerance)) { @@ -2347,8 +2400,11 @@ protected override void OnMouseUp(MouseEventArgs e) /*|| _activeTool == Tools.QueryPolygon*/) _rectangle = Rectangle.Empty; - if (_dragStartCoord == null || !_dragStartCoord.Equals2D(_map.Center, PrecisionTolerance)) + if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) Refresh(); + + if (_dragTransform != null) + _dragTransform.Dispose(); } else if (needToRefresh && (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || _activeTool == Tools.Pan)) { diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index d771ca83..3bc9cd4d 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -87,7 +87,7 @@ static Map() throw new InvalidOperationException(); } } - + // The following code did not seem to work in all cases. /* if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime) @@ -231,12 +231,12 @@ private void OnLayersCollectionChanged(object sender, NotifyCollectionChangedEve { IterWireEvents(sender, e.NewItems.Cast()); } - + } private void IterWireEvents(object owner, IEnumerable layers) { - foreach(var layer in layers) + foreach (var layer in layers) { _layersPerGroup[owner].Add(layer); @@ -304,7 +304,7 @@ private void IterUnHookEvents(object owner, IEnumerable layers) var clonedList = _layersPerGroup[owner]; toBeRemoved.ForEach(layer => clonedList.Remove(layer)); } - + private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) { var layerGroup = (LayerGroup)sender; @@ -327,7 +327,7 @@ private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) private void OnLayerGroupCollectionReplaching(object sender, EventArgs eventArgs) { - var layerGroup = (LayerGroup) sender; + var layerGroup = (LayerGroup)sender; _replacingCollection = layerGroup.Layers; } @@ -543,28 +543,28 @@ public Metafile GetMapAsMetafile(string metafileName) var bm = new Bitmap(1, 1); using (var g = Graphics.FromImage(bm)) { - var hdc = g.GetHdc(); - using (var stream = new MemoryStream()) - { - metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), - MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); - - using (var metafileGraphics = Graphics.FromImage(metafile)) - { - metafileGraphics.PageUnit = GraphicsUnit.Pixel; - metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, - new[] {new PointF(Size.Width, Size.Height)}); - - //Render map to metafile - RenderMap(metafileGraphics); - } - - //Save metafile if desired - if (!String.IsNullOrEmpty(metafileName)) - File.WriteAllBytes(metafileName, stream.ToArray()); - } + var hdc = g.GetHdc(); + using (var stream = new MemoryStream()) + { + metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), + MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); + + using (var metafileGraphics = Graphics.FromImage(metafile)) + { + metafileGraphics.PageUnit = GraphicsUnit.Pixel; + metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, + new[] { new PointF(Size.Width, Size.Height) }); + + //Render map to metafile + RenderMap(metafileGraphics); + } + + //Save metafile if desired + if (!String.IsNullOrEmpty(metafileName)) + File.WriteAllBytes(metafileName, stream.ToArray()); + } g.ReleaseHdc(hdc); - } + } return metafile; } @@ -581,7 +581,7 @@ public void MapNewTileAvaliableHandler(ITileAsyncLayer sender, Envelope bbox, Bi { var e = MapNewTileAvaliable; if (e != null) - e(sender, bbox, bm,sourceWidth,sourceHeight,imageAttributes); + e(sender, bbox, bm, sourceWidth, sourceHeight, imageAttributes); } /// @@ -803,7 +803,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool break; } - if (lc== null || lc.Count == 0) + if (lc == null || lc.Count == 0) throw new InvalidOperationException("No layers to render"); Matrix transform = g.Transform; @@ -839,7 +839,7 @@ public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool if (drawTransparent) g.Transform = transform; - + if (layerCollectionType == LayerCollectionType.Static) { #pragma warning disable 612,618 @@ -970,7 +970,7 @@ public IEnumerable FindLayer(string layername) /// Layer public ILayer GetLayerByName(string name) { - ILayer lay = null; + ILayer lay = null; if (Layers != null) { lay = Layers.GetLayerByName(name); @@ -1051,15 +1051,17 @@ public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) if (!careAboutMapTransform) return pTmp; - // working with MapTransform clone - if ( MapTransformRotation != 0) - using (var transform = MapTransform) + if (!MapTransformRotation.Equals(0f)) { - if (!transform.IsIdentity ) + // working with MapTransform clone + using (var transform = MapTransform) { - var pts = new[] { pTmp }; + if (!transform.IsIdentity) + { + var pts = new[] {pTmp}; transform.TransformPoints(pts); - pTmp = pts[0]; + pTmp = pts[0]; + } } } @@ -1167,17 +1169,26 @@ public Envelope Envelope var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); - - var ptfll = WorldToImage(ll, true); - ptfll = new PointF(Math.Abs(ptfll.X), Math.Abs(Size.Height - ptfll.Y)); - if (!ptfll.IsEmpty) + + if (MapTransformRotation.Equals(0f)) + return new Envelope(ll, ur); + else { - ll.X = ll.X - ptfll.X * PixelWidth; - ll.Y = ll.Y - ptfll.Y * PixelHeight; - ur.X = ur.X + ptfll.X * PixelWidth; - ur.Y = ur.Y + ptfll.Y * PixelHeight; + var pts = new[] { new PointF((float)ll.X, (float)ll.Y), + new PointF((float)ll.X, (float)ur.Y), + new PointF((float)ur.X, (float)ur.Y), + new PointF((float)ur.X, (float)ll.Y)}; + + Matrix matrix = new Matrix(); + matrix.RotateAt(-MapTransformRotation, new PointF((float)Center.X, (float)Center.Y)); + matrix.TransformPoints(pts); + + return new Envelope(Math.Min(Math.Min(Math.Min(pts[0].X, pts[1].X), pts[2].X), pts[3].X), + Math.Max(Math.Max(Math.Max(pts[0].X, pts[1].X), pts[2].X), pts[3].X), + Math.Min(Math.Min(Math.Min(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y), + Math.Max(Math.Max(Math.Max(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y)); } - return new Envelope(ll, ur); + } } @@ -1212,10 +1223,15 @@ public Matrix MapTransform _mapTransformInverted = value.Clone(); _mapTransformInverted.Invert(); - if (_mapTransform.IsIdentity) + if (value.IsIdentity) MapTransformRotation = 0; else - MapTransformRotation = Convert.ToSingle(Math.Acos(_mapTransform.Elements[0]) * 180.0 / Math.PI); + { + var rad = value.Elements[1] >= 0 ? Math.Acos(value.Elements[0]) : -Math.Acos(value.Elements[0]); + if (rad < 0) + rad += 2 * Math.PI; + MapTransformRotation = (float)(rad * 180.0 / Math.PI); + } } } @@ -1296,7 +1312,7 @@ public Point Center _center = newCenter; changed = true; } - + if (changed && MapViewOnChange != null) MapViewOnChange(); } @@ -1315,7 +1331,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int) g.DpiX; + _dpiX = (int)g.DpiX; } } @@ -1327,7 +1343,7 @@ public double MapScale { using (var g = Graphics.FromHwnd(IntPtr.Zero)) { - _dpiX = (int) g.DpiX; + _dpiX = (int)g.DpiX; } } Zoom = GetMapZoomFromScale(value, _dpiX.Value); @@ -1388,7 +1404,7 @@ public double Zoom /// public double PixelSize { - get { return Zoom/Size.Width; } + get { return Zoom / Size.Width; } } /// @@ -1429,7 +1445,7 @@ public double PixelAspectRatio /// public double MapHeight { - get { return (Zoom*Size.Height)/Size.Width*PixelAspectRatio; } + get { return (Zoom * Size.Height) / Size.Width * PixelAspectRatio; } } /// @@ -1510,7 +1526,7 @@ private static void ExtendBoxForCollection(IEnumerable layersCollection, { foreach (var l in layersCollection) { - + //Tries to get bb. Fails on some specific shapes and Mercator projects (World.shp) Envelope bb; try @@ -1557,7 +1573,7 @@ public String Disclaimer _disclaimerFont = new Font(FontFamily.GenericSansSerif, 8f); } } - } + } private Font _disclaimerFont; /// @@ -1586,7 +1602,7 @@ public Font DisclaimerFont public Int32 DisclaimerLocation { get { return _disclaimerLocation; } - set { _disclaimerLocation = value%4; } + set { _disclaimerLocation = value % 4; } } diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index e4267808..41ef8c7b 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -55,7 +55,7 @@ public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAs PixelHeight = PixelWidth*pixelAspectRatio; Zoom = env.Width; - MapHeight = Zoom*pixelAspectRatio; + MapHeight = Zoom * pixelAspectRatio; // already cloned //_mapTransform = mapTransform; diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index 5987da3b..f68f4abf 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -1,16 +1,9 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Drawing.Imaging; -using System.Linq; -using System.Linq.Expressions; -using System.Reactive; using System.Reactive.Linq; -using System.Reflection; -using System.Reflection.Emit; using GeoAPI.Geometries; -using Microsoft.SqlServer.Server; using Moq; using NUnit.Framework; using NetTopologySuite.Geometries; @@ -19,7 +12,7 @@ using SharpMap.Data.Providers; using Geometry = GeoAPI.Geometries.IGeometry; using SharpMap.Layers; -using Point=GeoAPI.Geometries.Coordinate; +using Point = GeoAPI.Geometries.Coordinate; using BoundingBox = GeoAPI.Geometries.Envelope; namespace UnitTests @@ -104,7 +97,7 @@ public void TestClone() } [Test] - [ExpectedException(typeof (InvalidOperationException))] + [ExpectedException(typeof(InvalidOperationException))] public void GetExtents_EmptyMap_ThrowInvalidOperationException() { Map map = new Map(new Size(2, 1)); @@ -145,7 +138,7 @@ public void Map_GetLayerByNameInGroupLayer() var lay = m.GetLayerByName("1"); Assert.IsNotNull(lay); - Assert.AreEqual("1",lay.LayerName); + Assert.AreEqual("1", lay.LayerName); lay = m.GetLayerByName("2"); Assert.IsNotNull(lay); Assert.AreEqual("2", lay.LayerName); @@ -155,7 +148,7 @@ public void Map_GetLayerByNameInGroupLayer() lay = m.GetLayerByName("Group"); Assert.IsNotNull(lay); Assert.AreEqual("Group", lay.LayerName); - + } [Test] @@ -231,7 +224,7 @@ public void GetMap_GeometryProvider_ReturnImage() } [Test] - [ExpectedException(typeof (InvalidOperationException))] + [ExpectedException(typeof(InvalidOperationException))] public void GetMap_RenderEmptyMap_ThrowInvalidOperationException() { Map map = new Map(new Size(2, 1)); @@ -286,6 +279,152 @@ public void ImageToWorld_DefaultMap_ReturnValue() Assert.AreEqual(new Point(8, 50), p); } + [Test] + public void ImageToWorld_Rotations() + { + // Test applying map transform at 30 degree increments, comparing Image>>World calcs + // with independent Affine Transformation, map Envelope checks, and generate image + ImageToWorld_Rotation(0); + ImageToWorld_Rotation(30); + ImageToWorld_Rotation(60); + ImageToWorld_Rotation(90); + ImageToWorld_Rotation(120); + ImageToWorld_Rotation(150); + ImageToWorld_Rotation(180); + ImageToWorld_Rotation(210); + ImageToWorld_Rotation(240); + ImageToWorld_Rotation(270); + ImageToWorld_Rotation(300); + ImageToWorld_Rotation(330); + //ImageToWorld_Rotation(360); + + ImageToWorld_Rotation(0); + ImageToWorld_Rotation(-30); + ImageToWorld_Rotation(-60); + ImageToWorld_Rotation(-90); + ImageToWorld_Rotation(-120); + ImageToWorld_Rotation(-150); + ImageToWorld_Rotation(-180); + ImageToWorld_Rotation(-210); + ImageToWorld_Rotation(-240); + ImageToWorld_Rotation(-270); + ImageToWorld_Rotation(-300); + ImageToWorld_Rotation(-330); + //ImageToWorld_Rotation(-360); + } + + private void ImageToWorld_Rotation(float deg) + { + var map = new Map(new Size(1000, 500)) { BackColor = System.Drawing.Color.LightSkyBlue }; + map.Zoom = 1000; + map.Center = new Point(25000, 75000); + double mapScale = map.GetMapScale(96); + + double scaleX = 1; + double scaleY = 1; + + System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); + mapTransform.RotateAt(deg, new PointF(map.Size.Width / 2f, map.Size.Height / 2f)); + map.MapTransform = mapTransform; + + var env = map.Envelope; + + // Affine Transformation: + // 1: Translate to mapViewPort centre + // 2: Reflect in X-Axis + // 3: Rotation about mapViewPort centre + // 4: Scale to map units + // 5: Translate to map centre + + //CLOCKWISE affine transform (negate degrees) + //double rad = -1 * deg * Math.PI / 180.0; + //GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = + // new ProjNet.CoordinateSystems.Transformations.AffineTransform( + // scaleX * Math.Cos(rad), + // -scaleX * Math.Sin(rad), + // -scaleX * Math.Cos(rad) * map.Size.Width / 2f + scaleX * Math.Sin(rad) * map.Size.Height / 2f + map.Center.X, + // -scaleY * Math.Sin(rad), + // -scaleY * Math.Cos(rad), + // scaleY * Math.Sin(rad) * map.Size.Width / 2f + scaleY * Math.Cos(rad) * map.Size.Height / 2f + map.Center.Y); + + //ANTICLCOCKWISE affine transform + double rad = deg * Math.PI / 180.0; + GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = + new ProjNet.CoordinateSystems.Transformations.AffineTransform( + scaleX * Math.Cos(rad), + scaleX * Math.Sin(rad), + -scaleX * Math.Cos(rad) * map.Size.Width / 2d - scaleX * Math.Sin(rad) * map.Size.Height / 2d + map.Center.X, + scaleY * Math.Sin(rad), + -scaleY * Math.Cos(rad), + -scaleY * Math.Sin(rad) * map.Size.Width / 2d + scaleY * Math.Cos(rad) * map.Size.Height / 2d + map.Center.Y); + + // image coordindates + var pts = new[] { new Point(map.Size.Width / 2f, map.Size.Height / 2f), // centre + new Point(0, 0), // UL + new Point(map.Size.Width, 0), // UR + new Point(map.Size.Width, map.Size.Height), // LR + new Point(0, map.Size.Height), // LL + new Point(map.Size.Width * 0.05, map.Size.Height * 0.95), // LL inset 5% + new Point(map.Size.Width * 0.95, map.Size.Height * 0.95), // LR inset 5% + new Point(map.Size.Width * 0.95, map.Size.Height * 0.05), // UR inset 5% + new Point(map.Size.Width * 0.05, map.Size.Height * 0.05) // UL inset 5% + }; + + LineString lineString = new LineString(pts); + + NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString(new GeometryFactory(new PrecisionModel()), lineString, trans); + + // .Net Matrix + //System.Drawing.Drawing2D.Matrix matrix; + //matrix = new System.Drawing.Drawing2D.Matrix(); + //matrix.Translate(-map.Size.Width / 2f, -map.Size.Height / 2f); // shift origin to viewport centre + //matrix.Scale(1, -1, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis + //matrix.Rotate(deg, System.Drawing.Drawing2D.MatrixOrder.Append); // rotate about viewport centre + //matrix.Scale((float)scaleX, (float)scaleY, System.Drawing.Drawing2D.MatrixOrder.Append); // scale + //matrix.Translate((float)map.Center.X, (float)map.Center.Y, System.Drawing.Drawing2D.MatrixOrder.Append); // translate to map centre + + //var ptsF = new[] { new PointF(map.Size.Width / 2f, map.Size.Height / 2f), // centre + // new PointF(0, 0), // UL + // new PointF(map.Size.Width, 0), // UR + // new PointF(map.Size.Width, map.Size.Height), // LR + // new PointF(0, map.Size.Height) }; // LL + + //matrix.TransformPoints(ptsF); + + // validate ImageToWorld calcs with independent affine transformation + Assert.IsTrue(lineString.GetPointN(0).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width / 2f, map.Size.Height / 2f), true), 0.001), "Centre: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(1).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, 0), true), 0.001), "Upper Left: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(2).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, 0), true), 0.001), "Upper Right: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(3).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height), true), 0.001), "Lower Right: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(4).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, map.Size.Height), true), 0.001), "Lower Left: " + deg + " deg"); + + // validate map envelope: lineString outline = image extents, so lineString.EnvelopeInternal should equal map.Envelope + // this test found long-standing bug in Map.Envelope calcs + Assert.IsTrue(env.BottomLeft().Equals2D(lineString.EnvelopeInternal.BottomLeft(), 0.1)); + Assert.IsTrue(env.TopLeft().Equals2D(lineString.EnvelopeInternal.TopLeft(), 0.1)); + Assert.IsTrue(env.TopRight().Equals2D(lineString.EnvelopeInternal.TopRight(), 0.1)); + Assert.IsTrue(env.BottomRight().Equals2D(lineString.EnvelopeInternal.BottomRight(), 0.1)); + + // visual checks + var vl = new VectorLayer("Test Points"); + var gp = new GeometryProvider(lineString); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(25000, 75000)); + vl.DataSource = gp; + var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer(); + cps.CharacterIndex = 221; + cps.Font = new Font("Wingdings", 30); + vl.Style.PointSymbolizer = cps; + map.Layers.Add(vl); + + map.ZoomToBox(lineString.EnvelopeInternal); + + string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.bmp"; + using (var img = map.GetMap(96)) + img.Save(fn,System.Drawing.Imaging.ImageFormat.Bmp); + + map.Dispose(); + } + [Test] public void Initalize_MapInstance() { @@ -414,7 +553,7 @@ public void TestZoomToBoxRaisesMapViewOnChange() var raised = false; var map = new Map(new Size(400, 200)); map.MapViewOnChange += () => raised = true; - + // ZoomToBox map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); Assert.IsTrue(raised, "MapViewOnChange not fired when calling Map.ZoomToBox(...)."); @@ -444,10 +583,10 @@ public void TestZoomToBoxRaisesMapViewOnChange() raised = false; map.Center = map.Center; Assert.IsFalse(raised, "MapViewOnChange fired when setting Map.Center = Map.Center."); - + } - - + + [TestCase(LayerCollectionType.Background, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to background collection, fires the MapNewTileAvailable event")] [TestCase(LayerCollectionType.Static, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to static collection, fires the MapNewTileAvailable event")] public void AddingTileAsyncLayers_HookItsMapNewTileAvaliableEvent(LayerCollectionType collectionType) @@ -457,11 +596,11 @@ public void AddingTileAsyncLayers_HookItsMapNewTileAvaliableEvent(LayerCollectio var layer = CreateTileAsyncLayer(); AddTileLayerToMap(layer, map, collectionType); - + var eventSource = map.GetMapNewTileAvailableAsObservable(); RaiseMapNewtileAvailableOn(layer); - + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); } @@ -477,7 +616,7 @@ public void AfterRemovingTileAsyncLayer_MapDoesNotHookAnymoreItsMapNewTileAvaila var eventSource = map.GetMapNewTileAvailableAsObservable(); - map.GetCollection(collectionType).RemoveAt(0); + map.GetCollection(collectionType).RemoveAt(0); RaiseMapNewtileAvailableOn(tileAsyncLayer); @@ -752,10 +891,10 @@ public void Map_TileAsyncAddedToDetachedCollection_DoesNotFireMapNewTileAvailabl public void MapLayers_AfterRemovingNotEmptyGroup_IsEmpty() { var map = new Map(); - + var group = CreateLayerGroup(); group.Layers.Add(new LabelLayer("labels")); - + map.Layers.Add(group); map.Layers.Remove(group); @@ -815,8 +954,8 @@ private LayerGroup CreateLayerGroup(string layerName = "group") } private void RaiseMapNewtileAvailableOn(Tuple, Mock> tileAsync) { - tileAsync.Item2.Raise(tal => tal.MapNewTileAvaliable += null, (TileLayer) null, (Envelope) null, (Bitmap) null, 0, - 0, (ImageAttributes) null); + tileAsync.Item2.Raise(tal => tal.MapNewTileAvaliable += null, (TileLayer)null, (Envelope)null, (Bitmap)null, 0, + 0, (ImageAttributes)null); } } -} \ No newline at end of file +} From afdf4da0c0b922e8f46f44c3cdd716846b8e129e Mon Sep 17 00:00:00 2001 From: FObermaier Date: Mon, 29 Oct 2018 09:17:02 +0100 Subject: [PATCH 064/186] Assign RequiresWindows category to MapTest --- UnitTests/MapTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index f68f4abf..8bc6567a 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -279,7 +279,7 @@ public void ImageToWorld_DefaultMap_ReturnValue() Assert.AreEqual(new Point(8, 50), p); } - [Test] + [Test, Category("RequiresWindows")] public void ImageToWorld_Rotations() { // Test applying map transform at 30 degree increments, comparing Image>>World calcs From d5f9266b139213c529266f8b269a024625a93c1f Mon Sep 17 00:00:00 2001 From: FObermaier Date: Mon, 29 Oct 2018 15:14:19 +0100 Subject: [PATCH 065/186] Replace #if NETSTANDARD with #if NETSTANDARD2_0 Revised based on further discussion on PR #114 * Fix SharpMap project to only build SharedAssemblyVersion.cs once --- SharpMap.Utilities.Indexing.SbnTree/packages.config | 5 ----- SharpMap/Data/Providers/OleDbPoint.cs | 2 +- SharpMap/Rendering/Symbolizer/Utility.cs | 4 ++-- SharpMap/SharpMap.csproj | 2 +- SharpMap/Styles/VectorStyle.cs | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 SharpMap.Utilities.Indexing.SbnTree/packages.config diff --git a/SharpMap.Utilities.Indexing.SbnTree/packages.config b/SharpMap.Utilities.Indexing.SbnTree/packages.config deleted file mode 100644 index a71c0596..00000000 --- a/SharpMap.Utilities.Indexing.SbnTree/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/SharpMap/Data/Providers/OleDbPoint.cs b/SharpMap/Data/Providers/OleDbPoint.cs index 327e8dfc..658bbaa6 100644 --- a/SharpMap/Data/Providers/OleDbPoint.cs +++ b/SharpMap/Data/Providers/OleDbPoint.cs @@ -1,4 +1,4 @@ -#if !NETSTANDARD +#if !NETSTANDARD2_0 // Copyright 2006 - Morten Nielsen (www.iter.dk) // // This file is part of SharpMap. diff --git a/SharpMap/Rendering/Symbolizer/Utility.cs b/SharpMap/Rendering/Symbolizer/Utility.cs index 9bdf5ab6..62c0a4c2 100644 --- a/SharpMap/Rendering/Symbolizer/Utility.cs +++ b/SharpMap/Rendering/Symbolizer/Utility.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; -#if NETSTANDARD +#if NETSTANDARD2_0 using KnownColor = SharpMap.Drawing.KnownColor; using SmColor = SharpMap.Drawing.Color; #else @@ -33,7 +33,7 @@ static Utility() /// A random color form the enumeration public static Color RandomKnownColor() { -#if !NETSTANDARD +#if !NETSTANDARD2_0 return Color.FromKnownColor(_knownColors[RND.Next(0, _knownColors.Count - 1)]); #else return SmColor.FromKnownColor(_knownColors[RND.Next(0, _knownColors.Count - 1)]); diff --git a/SharpMap/SharpMap.csproj b/SharpMap/SharpMap.csproj index 28b5249d..fdece0bf 100644 --- a/SharpMap/SharpMap.csproj +++ b/SharpMap/SharpMap.csproj @@ -35,7 +35,7 @@ $(SolutionDir.SubString(1,1)) - + diff --git a/SharpMap/Styles/VectorStyle.cs b/SharpMap/Styles/VectorStyle.cs index d9b6fff9..d382d2c2 100644 --- a/SharpMap/Styles/VectorStyle.cs +++ b/SharpMap/Styles/VectorStyle.cs @@ -22,7 +22,7 @@ using GeoAPI.Geometries; using SharpMap.Rendering.Symbolizer; using Common.Logging; -#if NETSTANDARD +#if NETSTANDARD2_0 using SmColor = SharpMap.Drawing.Color; using Color = System.Drawing.Color; using KnownColor = SharpMap.Drawing.KnownColor; From fd61ecd18e1a9c595153b0bce1591e0c924993ee Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 30 Oct 2018 13:42:11 +0700 Subject: [PATCH 066/186] Group ctors and update param descriptions; white space normalization --- SharpMap/Data/Providers/SqlServer2008.cs | 116 ++++++++++++----------- 1 file changed, 62 insertions(+), 54 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 5f309c39..a1b94195 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -14,11 +14,19 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. - + // You should have received a copy of the GNU Lesser General Public License // along with if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - + +// Note - Supports both Geometry AND Geography types for SQL Server 2008 onwards. +// The '2008' suffix in the class name is to distinguish from MsSqlSpatial provider (Sql Server 2005). +// SqlServer2008 requests WKB from the database (hence will work with Sql Server 2008, 2012, 2016 etc), +// and WKB is then parsed to an IGeometry instance using SharpMap.Converters.WellKnownBinary.GeometryFromWKB +// +// Alternatively, to work with native Sql Spatial types, see SharpMap.SqlServerSpatialObjects which requests +// raw spatial bytes from the database and uses Microsoft.SqlServer.Types to convert Sql bytes on the client. + using System; using System.Collections.ObjectModel; using System.Collections.Generic; @@ -86,7 +94,31 @@ public enum SqlServer2008ExtentsMode public class SqlServer2008 : BaseProvider { /// - /// Initializes a new connection to SQL Server + /// Initializes a new connection to SQL Server for Geometry spatial type in column named SHAPE + /// + /// Connectionstring + /// Name of data table + /// Name of column with unique identifier + public SqlServer2008(string connectionStr, string tablename, string oidColumnName) + : this(connectionStr, tablename, "shape", oidColumnName, SqlServerSpatialObjectType.Geometry) + { + } + + /// + /// Initializes a new connection to SQL Server for spatial column named SHAPE + /// + /// Connectionstring + /// Name of data table + /// Name of column with unique identifier + /// The type of the spatial object to use for spatial queries + public SqlServer2008(string connectionStr, string tablename, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType) + : this(connectionStr, tablename, "shape", oidColumnName, spatialObjectType) + { + } + + /// + /// Initializes a new connection to SQL Server for Geometry spatial type with default Extents mode /// /// Connectionstring /// Name of data table @@ -98,16 +130,16 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu } /// - /// Initializes a new connection to SQL Server + /// Initializes a new connection to SQL Server with default Extents mode /// /// Connectionstring /// Name of data table - /// Name of geometry column + /// Name of spatial column /// Name of column with unique identifier - /// The type of the spatial object to use for spatial queries - public SqlServer2008(string connectionStr, string tablename, string geometryColumnName, string oidColumnName, + /// spatial type (Geometry or Geography) + public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType) - : this(connectionStr, tablename, geometryColumnName, oidColumnName, spatialObjectType, false) + : this(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, false) { } @@ -116,14 +148,14 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu /// /// Connectionstring /// Name of data table - /// Name of geometry column + /// Name of spatial column /// Name of column with unique identifier - /// The type of the spatial object to use for spatial queries - /// If true, the bounds of the spatial index is used for the GetExtents() method which heavily increases performance instead of reading through all features in the table - public SqlServer2008(string connectionStr, string tablename, string geometryColumnName, string oidColumnName, + /// spatial type (Geometry or Geography) + /// If true, the bounds of the spatial index is used for the GetExtents() method which significantly improves performance instead of reading through all features in the table + public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType, bool useSpatialIndexExtentAsExtent) : this( - connectionStr, tablename, geometryColumnName, oidColumnName, spatialObjectType, + connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, useSpatialIndexExtentAsExtent, 0) { } @@ -133,19 +165,19 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu /// /// Connectionstring /// Name of data table - /// Name of geometry column + /// Name of spatial column /// Name of column with unique identifier - /// The type of the spatial object to use for spatial queries + /// spatial type (Geometry or Geography) /// If true, the bounds of the spatial index is used for the GetExtents() method which heavily increases performance instead of reading through all features in the table /// The spatial reference id - public SqlServer2008(string connectionStr, string tablename, string geometryColumnName, string oidColumnName, + public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType, bool useSpatialIndexExtentAsExtent, int srid) { ConnectionString = connectionStr; ParseTablename(tablename); - GeometryColumn = geometryColumnName; + GeometryColumn = spatialColumnName; ObjectIdColumn = oidColumnName; _spatialObjectType = spatialObjectType; switch (spatialObjectType) @@ -159,7 +191,7 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu break; } - _extentsMode = (useSpatialIndexExtentAsExtent + ExtentsMode = (useSpatialIndexExtentAsExtent ? SqlServer2008ExtentsMode.SpatialIndex : SqlServer2008ExtentsMode.QueryIndividualFeatures); @@ -174,7 +206,7 @@ protected void ParseTablename(string tablename) { bool open = false; var sb = new StringBuilder(tablename.Length); - var lc = char.MinValue; + var lastChar = char.MinValue; foreach (var c in tablename) { @@ -191,7 +223,7 @@ protected void ParseTablename(string tablename) open = false; break; case '.': - if (lc == char.MinValue) + if (lastChar == char.MinValue) throw new ArgumentException("tablename"); if (open) sb.Append(c); @@ -200,16 +232,16 @@ protected void ParseTablename(string tablename) if (string.IsNullOrEmpty(TableSchema)) TableSchema = sb.ToString(); else - TableSchema += "." + sb; - sb.Clear(); + TableSchema += "." + sb.ToString(); + sb.Clear(); } break; default: sb.Append(c); break; } - lc = c; + lastChar = c; } if (open) @@ -218,30 +250,6 @@ protected void ParseTablename(string tablename) Table = sb.ToString(); } - /// - /// Initializes a new connection to SQL Server - /// - /// Connectionstring - /// Name of data table - /// Name of column with unique identifier - public SqlServer2008(string connectionStr, string tablename, string oidColumnName) - : this(connectionStr, tablename, "shape", oidColumnName, SqlServerSpatialObjectType.Geometry) - { - } - - /// - /// Initializes a new connection to SQL Server - /// - /// Connectionstring - /// Name of data table - /// Name of column with unique identifier - /// The type of the spatial object to use for spatial queries - public SqlServer2008(string connectionStr, string tablename, string oidColumnName, - SqlServerSpatialObjectType spatialObjectType) - : this(connectionStr, tablename, "shape", oidColumnName, spatialObjectType) - { - } - private SqlServer2008ExtentsMode _extentsMode; /// @@ -416,7 +424,7 @@ public override Collection GetGeometriesInView(Envelope bbox) { if (dr[0] != DBNull.Value) { - var geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[]) dr[0], Factory); + var geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); if (geom != null) { if (_spatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); @@ -452,7 +460,7 @@ public override IGeometry GetGeometryByID(uint oid) { if (dr[0] != DBNull.Value) { - geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[]) dr[0], Factory); + geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); if (_spatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); } } @@ -583,7 +591,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") fdr[col.ColumnName] = dr[col]; var tmpGeom = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[]) dr["sharpmap_tempgeometry"], + Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); if (tmpGeom != null && _spatialObjectType == SqlServerSpatialObjectType.Geography) { @@ -634,7 +642,7 @@ public override int GetFeatureCount() using (var command = new SqlCommand(strSql, conn)) { conn.Open(); - count = (int) command.ExecuteScalar(); + count = (int)command.ExecuteScalar(); conn.Close(); } } @@ -693,7 +701,7 @@ public override FeatureDataRow GetFeature(uint rowId) if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") fdr[col.ColumnName] = dr[col]; var tmpGeom = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[]) dr["sharpmap_tempgeometry"], + Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); if (tmpGeom != null && _spatialObjectType == SqlServerSpatialObjectType.Geography) { @@ -854,7 +862,7 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") fdr[col.ColumnName] = dr[col]; fdr.Geometry = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[]) dr["sharpmap_tempgeometry"], + Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); fdt.AddRow(fdr); } @@ -925,4 +933,4 @@ protected string BuildTableHints() return string.Empty; } } -} \ No newline at end of file +} From 6ce7df666dd2b829dc1ab0915a16e7278245424a Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 30 Oct 2018 14:03:33 +0700 Subject: [PATCH 067/186] Change to autoprops; apply private set to props Table/Schema/OID/GeomCol. --- SharpMap/Data/Providers/SqlServer2008.cs | 135 ++++++----------------- 1 file changed, 32 insertions(+), 103 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index a1b94195..35cdf2d1 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -179,7 +179,7 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum GeometryColumn = spatialColumnName; ObjectIdColumn = oidColumnName; - _spatialObjectType = spatialObjectType; + SpatialObjectType = spatialObjectType; switch (spatialObjectType) { case SqlServerSpatialObjectType.Geometry: @@ -250,16 +250,10 @@ protected void ParseTablename(string tablename) Table = sb.ToString(); } - private SqlServer2008ExtentsMode _extentsMode; - /// /// Gets or sets the method used in the method. /// - public SqlServer2008ExtentsMode ExtentsMode - { - get { return _extentsMode; } - set { _extentsMode = value; } - } + public SqlServer2008ExtentsMode ExtentsMode { get; set; } /// /// Connectionstring @@ -270,27 +264,15 @@ public string ConnectionString set { ConnectionID = value; } } - private string _table; - /// /// Data table name /// - public string Table - { - get { return _table; } - set { _table = value; } - } - - private string _schema; + public string Table { get; private set; } /// /// Data table schema /// - public string TableSchema - { - get { return _schema; } - set { _schema = value; } - } + public string TableSchema { get; private set; } /// /// Gets a value indicating the qualified schema table name in square brackets @@ -307,57 +289,32 @@ protected string QualifiedTable } } - private string _geometryColumn; - /// /// Name of geometry column /// - public string GeometryColumn - { - get { return _geometryColumn; } - set { _geometryColumn = value; } - } - - private string _objectIdColumn; + public string GeometryColumn { get; private set; } /// /// Name of column that contains the Object ID /// - public string ObjectIdColumn - { - get { return _objectIdColumn; } - set { _objectIdColumn = value; } - } - - private bool _makeValid; + public string ObjectIdColumn { get; private set; } /// /// Gets/Sets whether all passed to SqlServer2008 should be made valid using this function. /// - public Boolean ValidateGeometries - { - get { return _makeValid; } - set { _makeValid = value; } - } + public Boolean ValidateGeometries { get; set; } private String MakeValidString { - get { return _makeValid ? ".MakeValid()" : String.Empty; } + get { return ValidateGeometries ? ".MakeValid()" : String.Empty; } } - private readonly SqlServerSpatialObjectType _spatialObjectType; private readonly string _spatialObject; /// /// Spatial object type for /// - public SqlServerSpatialObjectType SpatialObjectType - { - get { return _spatialObjectType; } - } - - - private int _maxDop; + public SqlServerSpatialObjectType SpatialObjectType { get; private set; } /// /// If set, sends an Option MaxDop to the SQL-Server to override the Parallel Execution of indexes @@ -367,11 +324,7 @@ public SqlServerSpatialObjectType SpatialObjectType /// MaxDop = 1 // Suppress Parallel execution of Queryplan /// MaxDop = [2..n] // Use X cores in in execution plan /// - public int MaxDop - { - get { return _maxDop; } - set { _maxDop = value; } - } + public int MaxDop { get; set; } /// /// Function to transform to sql for the query @@ -379,9 +332,9 @@ public int MaxDop /// MAXDOP option striong protected string GetExtraOptions() { - if (_maxDop != 0) + if (MaxDop != 0) { - return "OPTION (MAXDOP " + _maxDop + ")"; + return "OPTION (MAXDOP " + MaxDop + ")"; } else { @@ -406,7 +359,7 @@ public override Collection GetGeometriesInView(Envelope bbox) string strSql = "SELECT g." + GeometryColumn + ".STAsBinary() "; strSql += " FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; strSql += strBbox; @@ -427,7 +380,7 @@ public override Collection GetGeometriesInView(Envelope bbox) var geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); if (geom != null) { - if (_spatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); features.Add(geom); } } @@ -461,7 +414,7 @@ public override IGeometry GetGeometryByID(uint oid) if (dr[0] != DBNull.Value) { geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); - if (_spatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); } } } @@ -499,7 +452,7 @@ public override Collection GetObjectIDsInView(Envelope bbox) string strSql = "SELECT g." + ObjectIdColumn + " "; strSql += "FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; strSql += strBbox; @@ -537,7 +490,7 @@ public override Collection GetObjectIDsInView(Envelope bbox) protected string GetBoxFilterStr(Envelope bbox) { //geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326); - if (_spatialObjectType == SqlServerSpatialObjectType.Geography) + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) bbox = new Envelope(bbox.MinY, bbox.MaxY, bbox.MinX, bbox.MaxY); var bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); // ""; //string whereClause = GeometryColumn + ".STIntersects(geometry::STGeomFromText('" + bboxText + "', " + SRID + ")" + MakeValidString + ") = 1"; @@ -563,7 +516,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe string strSql = "SELECT g.* , g." + GeometryColumn + ".STAsBinary() As sharpmap_tempgeometry FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; strSql += strGeom; @@ -593,7 +546,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe var tmpGeom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); - if (tmpGeom != null && _spatialObjectType == SqlServerSpatialObjectType.Geography) + if (tmpGeom != null && SpatialObjectType == SqlServerSpatialObjectType.Geography) { FlipXY(tmpGeom); tmpGeom.GeometryChanged(); @@ -637,7 +590,7 @@ public override int GetFeatureCount() using (var conn = new SqlConnection(ConnectionString)) { var strSql = "SELECT COUNT(*) FROM " + QualifiedTable; - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += " WHERE " + DefinitionQuery; using (var command = new SqlCommand(strSql, conn)) { @@ -651,16 +604,10 @@ public override int GetFeatureCount() #region IProvider Members - private string _definitionQuery; - /// /// Definition query used for limiting dataset /// - public string DefinitionQuery - { - get { return _definitionQuery; } - set { _definitionQuery = value; } - } + public string DefinitionQuery { get; set; } /// /// Gets a collection of columns in the dataset @@ -703,7 +650,7 @@ public override FeatureDataRow GetFeature(uint rowId) var tmpGeom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); - if (tmpGeom != null && _spatialObjectType == SqlServerSpatialObjectType.Geography) + if (tmpGeom != null && SpatialObjectType == SqlServerSpatialObjectType.Geography) { FlipXY(tmpGeom); tmpGeom.GeometryChanged(); @@ -728,12 +675,12 @@ public override Envelope GetExtents() { conn.Open(); string sql; - switch (_extentsMode) + switch (ExtentsMode) { case SqlServer2008ExtentsMode.SpatialIndex: sql = "select bounding_box_xmin,bounding_box_xmax,bounding_box_ymin,bounding_box_ymax from sys.spatial_index_tessellations where object_id = (select object_id from sys.tables where name = '" + - _table + "' and type_desc = 'USER_TABLE')"; + Table + "' and type_desc = 'USER_TABLE')"; using (var command = new SqlCommand(sql, conn)) { @@ -754,7 +701,7 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.QueryIndividualFeatures: - if (_spatialObjectType == SqlServerSpatialObjectType.Geography) + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) { // The geography datatype does not have the STEnvelope method. If using SQL2012, EnvelopeAggregate provides an alternative throw new NotSupportedException("STEnvelope does not work with geography!"); @@ -764,7 +711,7 @@ public override Envelope GetExtents() sql = String.Format("SELECT g.{0}{1}.STEnvelope().STAsText() FROM {2} g ", GeometryColumn, MakeValidString, QualifiedTable); - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) sql += " WHERE " + DefinitionQuery; using (var command = new SqlCommand(sql, conn)) @@ -786,7 +733,7 @@ public override Envelope GetExtents() sql = String.Format("SELECT {3}::EnvelopeAggregate(g.{0}{1}).STAsText() FROM {2} g ", GeometryColumn, MakeValidString, QualifiedTable, _spatialObject); - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) sql += " WHERE " + DefinitionQuery; using (var command = new SqlCommand(sql, conn)) { @@ -796,7 +743,7 @@ public override Envelope GetExtents() { var wkt = dr.GetString(0); var g = Converters.WellKnownText.GeometryFromWKT.Parse(wkt); - if (_spatialObjectType == SqlServerSpatialObjectType.Geography) + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) { FlipXY(g); g.GeometryChanged(); @@ -833,7 +780,7 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) "SELECT g.*, g.{0}{1}.STAsBinary() AS sharpmap_tempgeometry FROM {2} g {3} WHERE ", GeometryColumn, MakeValidString, QualifiedTable, BuildTableHints()); - if (!String.IsNullOrEmpty(_definitionQuery)) + if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; strSql += strBbox; @@ -874,38 +821,20 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) #endregion - private bool _forceSeekHint; - /// /// When true, uses the FORCESEEK table hint. /// - public bool ForceSeekHint - { - get { return _forceSeekHint; } - set { _forceSeekHint = value; } - } - - private bool _noLockHint; + public bool ForceSeekHint { get; set; } /// /// When true, uses the NOLOCK table hint. /// - public bool NoLockHint - { - get { return _noLockHint; } - set { _noLockHint = value; } - } - - private string _forceIndex; + public bool NoLockHint { get; set; } /// /// When set, forces use of the specified index /// - public string ForceIndex - { - get { return _forceIndex; } - set { _forceIndex = value; } - } + public string ForceIndex { get; set; } /// /// Builds the WITH clause containing all specified table hints From 893b4eee67f9cf70282e8d20c0f56151484d28e3 Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 30 Oct 2018 14:53:32 +0700 Subject: [PATCH 068/186] method GetBoxFilterString fix incorrect orientation when using geog --- SharpMap/Data/Providers/SqlServer2008.cs | 34 +++++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 35cdf2d1..9cbaadc4 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -183,11 +183,11 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum switch (spatialObjectType) { case SqlServerSpatialObjectType.Geometry: - _spatialObject = "geometry"; + _spatialTypeString = "geometry"; break; //case SqlServerSpatialObjectType.Geography: default: - _spatialObject = "geography"; + _spatialTypeString = "geography"; break; } @@ -309,7 +309,7 @@ private String MakeValidString get { return ValidateGeometries ? ".MakeValid()" : String.Empty; } } - private readonly string _spatialObject; + private readonly string _spatialTypeString; /// /// Spatial object type for @@ -489,14 +489,28 @@ public override Collection GetObjectIDsInView(Envelope bbox) /// protected string GetBoxFilterStr(Envelope bbox) { - //geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326); + string bboxText; if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - bbox = new Envelope(bbox.MinY, bbox.MaxY, bbox.MinX, bbox.MaxY); - var bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); // ""; + { + // SqlServer geography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) + // For reference: MakeValid() is another way to ensure Geography polygon is correctly oriented + // Note: default numeric rounding of Min/Max X/Y + bboxText = $"POLYGON (({bbox.MinX} {bbox.MinY}, {bbox.MaxX} {bbox.MinY}, {bbox.MaxX} {bbox.MaxY}, {bbox.MinX} {bbox.MaxY}, {bbox.MinX} {bbox.MinY}))"; + } + else + { + // GeometryToWKT returns clockwise ring + bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); // ""; + } + + // STGeomFromText applicable to both Geometry AND Geography. + // STGeomFromText values are converted from nvarchar to binary(8) - it is possible that truncation or rounding may occur + //string whereClause = GeometryColumn + ".STIntersects(geometry::STGeomFromText('" + bboxText + "', " + SRID + ")" + MakeValidString + ") = 1"; string whereClause = String.Format("{0}{1}.STIntersects({4}::STGeomFromText('{2}', {3})) = 1", - GeometryColumn, MakeValidString, bboxText, SRID, _spatialObject); - return whereClause; // strBbox; + GeometryColumn, MakeValidString, bboxText, SRID, _spatialTypeString); + + return whereClause; } /// @@ -508,7 +522,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe { using (var conn = new SqlConnection(ConnectionString)) { - string strGeom = _spatialObject + "::STGeomFromText('" + geom.AsText() + "', #SRID#)"; + string strGeom = _spatialTypeString + "::STGeomFromText('" + geom.AsText() + "', #SRID#)"; strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(CultureInfo.InvariantCulture) : "0"); strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1"; @@ -731,7 +745,7 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.EnvelopeAggregate: sql = String.Format("SELECT {3}::EnvelopeAggregate(g.{0}{1}).STAsText() FROM {2} g ", - GeometryColumn, MakeValidString, QualifiedTable, _spatialObject); + GeometryColumn, MakeValidString, QualifiedTable, _spatialTypeString); if (!String.IsNullOrEmpty(DefinitionQuery)) sql += " WHERE " + DefinitionQuery; From f97b61999ba73ac1797795c284bfbdae7fa6cdce Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 30 Oct 2018 15:28:56 +0700 Subject: [PATCH 069/186] remove method FlipXY incorrectly applied to geography types --- SharpMap/Data/Providers/SqlServer2008.cs | 59 ++++++------------------ 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 9cbaadc4..cf9b8b6c 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -379,10 +379,7 @@ public override Collection GetGeometriesInView(Envelope bbox) { var geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); if (geom != null) - { - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); features.Add(geom); - } } } } @@ -412,10 +409,7 @@ public override IGeometry GetGeometryByID(uint oid) while (dr.Read()) { if (dr[0] != DBNull.Value) - { geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) FlipXY(geom); - } } } } @@ -423,19 +417,7 @@ public override IGeometry GetGeometryByID(uint oid) } return geom; } - - private static void FlipXY(IGeometry geom) - { - var coords = geom.Coordinates; - for (var i = 0; i < coords.Length; i++) - { - var x = coords[i].X; - coords[i].X = coords[i].Y; - coords[i].Y = x; - } - geom.GeometryChanged(); - } - + /// /// Returns geometry Object IDs whose bounding box intersects 'bbox' /// @@ -502,8 +484,8 @@ protected string GetBoxFilterStr(Envelope bbox) // GeometryToWKT returns clockwise ring bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); // ""; } - - // STGeomFromText applicable to both Geometry AND Geography. + + // STGeomFromText applicable to both Geometry AND Geography (ie x,y) // STGeomFromText values are converted from nvarchar to binary(8) - it is possible that truncation or rounding may occur //string whereClause = GeometryColumn + ".STIntersects(geometry::STGeomFromText('" + bboxText + "', " + SRID + ")" + MakeValidString + ") = 1"; @@ -557,15 +539,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") fdr[col.ColumnName] = dr[col]; - var tmpGeom = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], - Factory); - if (tmpGeom != null && SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - FlipXY(tmpGeom); - tmpGeom.GeometryChanged(); - } - fdr.Geometry = tmpGeom; + fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); fdt.AddRow(fdr); } ds.Tables.Add(fdt); @@ -661,15 +635,9 @@ public override FeatureDataRow GetFeature(uint rowId) foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") fdr[col.ColumnName] = dr[col]; - var tmpGeom = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], - Factory); - if (tmpGeom != null && SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - FlipXY(tmpGeom); - tmpGeom.GeometryChanged(); - } - fdr.Geometry = tmpGeom; + + fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); + return fdr; } return null; @@ -685,6 +653,8 @@ public override FeatureDataRow GetFeature(uint rowId) /// boundingbox public override Envelope GetExtents() { + // STAsText applicable to both Geometry AND Geography (ie x,y) + using (var conn = new SqlConnection(ConnectionString)) { conn.Open(); @@ -744,11 +714,15 @@ public override Envelope GetExtents() } case SqlServer2008ExtentsMode.EnvelopeAggregate: + + // SqlGeometry returns a rectilinear polygon + // SqlGeography returns a CURVED polygon sql = String.Format("SELECT {3}::EnvelopeAggregate(g.{0}{1}).STAsText() FROM {2} g ", - GeometryColumn, MakeValidString, QualifiedTable, _spatialTypeString); + GeometryColumn, MakeValidString, QualifiedTable, _spatialTypeString); if (!String.IsNullOrEmpty(DefinitionQuery)) sql += " WHERE " + DefinitionQuery; + using (var command = new SqlCommand(sql, conn)) { using (var dr = command.ExecuteReader()) @@ -757,11 +731,6 @@ public override Envelope GetExtents() { var wkt = dr.GetString(0); var g = Converters.WellKnownText.GeometryFromWKT.Parse(wkt); - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - FlipXY(g); - g.GeometryChanged(); - } return g.EnvelopeInternal; } } From 8b75530b314556599f0a342c3d8e490fd060b92d Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 30 Oct 2018 20:54:25 +0700 Subject: [PATCH 070/186] Add SqlServer LocalDb to project Examples/WinFormSamples --- .../GeoData/SqlServer/SqlServerSample.mdf | Bin 0 -> 3080192 bytes .../GeoData/SqlServer/SqlServerSample_log.ldf | Bin 0 -> 4071424 bytes Examples/WinFormSamples/WinFormSamples.csproj | 7 +++++++ Examples/WinFormSamples/app.config | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf create mode 100644 Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf diff --git a/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf b/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf new file mode 100644 index 0000000000000000000000000000000000000000..8075594cd1d20d0f73d0b304eaf0888c772184cc GIT binary patch literal 3080192 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

    ZFK}etuI~-l8Kg_MHQ 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

    uJ%Vj-g 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

    28U|m9sNxEIn6pI28U`$Yt5cn<~7Z_H%VA9 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 qCYsP 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ê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νK-j4Uu#L9ZDQ;L}iz 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 I1m0iZU#FK{A^-pY literal 0 HcmV?d00001 diff --git a/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf b/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf new file mode 100644 index 0000000000000000000000000000000000000000..1b8326768df83e99814311accdd1a319282995d8 GIT binary patch literal 4071424 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 F&E~GAK*m6r{gEj*}mar_D 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 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q7Ut?bsm>03Zwlz!}~F|L2nkF!MDeH?uTN zCQgn30RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBm_3+x)zXWqEp?xjS4009C72oNAZfB*pk1PFX65Pv8* zNPqwV0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkJx GC~yEnb*#n! literal 0 HcmV?d00001 diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index 26c3066b..9a027413 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -395,6 +395,13 @@ Designer + + Always + + + Always + SqlServerSample.mdf + PreserveNewest diff --git a/Examples/WinFormSamples/app.config b/Examples/WinFormSamples/app.config index 32c02887..6dbc7a4f 100644 --- a/Examples/WinFormSamples/app.config +++ b/Examples/WinFormSamples/app.config @@ -11,6 +11,7 @@ + @@ -88,4 +89,4 @@ - \ No newline at end of file + From 069211d800b1a04c117456f1f0fda9a28168500d Mon Sep 17 00:00:00 2001 From: joriswit Date: Sat, 3 Nov 2018 10:51:55 +0100 Subject: [PATCH 071/186] Minor DbPoint provider naming fixes --- SharpMap/Data/Providers/DbPoint.cs | 8 ++++---- SharpMap/Data/Providers/DbTwoPointLine.cs | 8 ++++---- UnitTests/Data/Providers/DbPointProviderTest.cs | 8 ++++---- UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/SharpMap/Data/Providers/DbPoint.cs b/SharpMap/Data/Providers/DbPoint.cs index cff51721..d51042a8 100644 --- a/SharpMap/Data/Providers/DbPoint.cs +++ b/SharpMap/Data/Providers/DbPoint.cs @@ -24,7 +24,7 @@ namespace SharpMap.Data.Providers { ///

    - /// The XYColumnPoint provider is used for rendering point data from an ADO.NET compatible data source. + /// The DbPoint provider is used for rendering point data from an ADO.NET compatible data source. /// /// /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, @@ -35,7 +35,7 @@ namespace SharpMap.Data.Providers /// /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); /// string connStr = @"Data Source=MyDatabaseFile.sqlite"; - /// myLayer.DataSource = new Data.Providers.XYColumnPoint(System.Data.SQLite.SQLiteFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); + /// myLayer.DataSource = new Data.Providers.DbPoint(System.Data.SQLite.SQLiteFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); /// /// /// @@ -43,7 +43,7 @@ namespace SharpMap.Data.Providers /// /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); /// string connStr = @"Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True;"; - /// myLayer.DataSource = new Data.Providers.XYColumnPoint(System.Data.SqlClient.SqlClientFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); + /// myLayer.DataSource = new Data.Providers.DbPoint(System.Data.SqlClient.SqlClientFactory.Instance, connStr, "myTable", "OidColumn", "X", "Y"); /// /// /// @@ -53,7 +53,7 @@ public class DbPoint : PreparedGeometryProvider private string _definitionQuery; /// - /// Initializes a new instance of the XYColumnPoint provider + /// Initializes a new instance of the DbPoint provider /// /// The ADO.NET database provider factory /// The connection string diff --git a/SharpMap/Data/Providers/DbTwoPointLine.cs b/SharpMap/Data/Providers/DbTwoPointLine.cs index b282eb72..d0906a87 100644 --- a/SharpMap/Data/Providers/DbTwoPointLine.cs +++ b/SharpMap/Data/Providers/DbTwoPointLine.cs @@ -24,7 +24,7 @@ namespace SharpMap.Data.Providers { /// - /// The XYColumnTwoPointLine provider is used for rendering line data from an ADO.NET compatible data source. + /// The DbTwoPointLine provider is used for rendering line data from an ADO.NET compatible data source. /// /// /// The data source will need to have two double-type columns, xColumn and yColumn that contains the coordinates of the point, @@ -32,12 +32,12 @@ namespace SharpMap.Data.Providers /// To get good performance, make sure you have applied indexes on ID, xColumn and yColumns in your data source table. /// [Serializable] - public class XYColumnTwoPointLine : PreparedGeometryProvider + public class DbTwoPointLine : PreparedGeometryProvider { private string _definitionQuery; /// - /// Initializes a new instance of the XYColumnTwoPointLine provider + /// Initializes a new instance of the DbTwoPointLine provider /// /// The ADO.NET database provider factory /// The connection string @@ -47,7 +47,7 @@ public class XYColumnTwoPointLine : PreparedGeometryProvider /// The name of the y-ordinates column of the beginning of the line /// The name of the x-ordinates column of the end of the line /// The name of the y-ordinates column of the end of the line - public XYColumnTwoPointLine(DbProviderFactory provider, string connectionString, string tableName, string oidColumnName, string xColumnBegin, string yColumnBegin, string xColumnEnd, string yColumnEnd) + public DbTwoPointLine(DbProviderFactory provider, string connectionString, string tableName, string oidColumnName, string xColumnBegin, string yColumnBegin, string xColumnEnd, string yColumnEnd) { Table = tableName; XColumnBegin = xColumnBegin; diff --git a/UnitTests/Data/Providers/DbPointProviderTest.cs b/UnitTests/Data/Providers/DbPointProviderTest.cs index a7f70c76..fe56666c 100644 --- a/UnitTests/Data/Providers/DbPointProviderTest.cs +++ b/UnitTests/Data/Providers/DbPointProviderTest.cs @@ -7,7 +7,7 @@ namespace UnitTests.Data.Providers { [Category("RequiresWindows")] - public class XYColumnPointProviderTest : ProviderTest + public class DbPointProviderTest : ProviderTest { private System.Data.Common.DbConnection _connection; // Keep connection active; when closed, the in-memory database is dropped @@ -27,14 +27,14 @@ private static System.Data.Common.DbConnection WriteSqlLite() using (var cmd = conn.CreateCommand()) { cmd.CommandText = - "CREATE TABLE XYColumnPointProviderTest(ID integer primary key, Name text, X real, Y real);"; + "CREATE TABLE DbPointProviderTest(ID integer primary key, Name text, X real, Y real);"; cmd.ExecuteNonQuery(); } using (var cmd = conn.CreateCommand()) { cmd.CommandText = - "INSERT INTO XYColumnPointProviderTest(ID, Name, X, Y) VALUES" + + "INSERT INTO DbPointProviderTest(ID, Name, X, Y) VALUES" + " (1, 'One', 429012.5, 360443.18)," + " (2, 'Two', 429001.59, 360446.98)," + " (3, 'Three', 429003.31, 360425.45)," + @@ -54,7 +54,7 @@ public void TearDownTestFixture() private DbPoint CreateProvider() { var p = new DbPoint(System.Data.SQLite.SQLiteFactory.Instance, - "FullUri=file::memory:?cache=shared;ToFullPath=false", "XYColumnPointProviderTest", "ID", "X", "Y"); + "FullUri=file::memory:?cache=shared;ToFullPath=false", "DbPointProviderTest", "ID", "X", "Y"); return p; diff --git a/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs b/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs index f0113424..02faad5e 100644 --- a/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs +++ b/UnitTests/Data/Providers/DbTwoPointLineProviderTest.cs @@ -27,14 +27,14 @@ private static System.Data.Common.DbConnection WriteSqlLite() using (var cmd = conn.CreateCommand()) { cmd.CommandText = - "CREATE TABLE XYColumnTwoPointLineProviderTest(ID integer primary key, Name text, X1 real, Y1 real, X2 real, Y2 real);"; + "CREATE TABLE DbTwoPointLineProviderTest(ID integer primary key, Name text, X1 real, Y1 real, X2 real, Y2 real);"; cmd.ExecuteNonQuery(); } using (var cmd = conn.CreateCommand()) { cmd.CommandText = - "INSERT INTO XYColumnTwoPointLineProviderTest(ID, Name, X1, Y1, X2, Y2) VALUES" + + "INSERT INTO DbTwoPointLineProviderTest(ID, Name, X1, Y1, X2, Y2) VALUES" + " (1, 'T1', 100, 100, 170, 100)," + " (2, 'T2', 135, 100, 135, 170)," + " (3, 'e1', 180, 130, 180, 170)," + @@ -60,10 +60,10 @@ public void TearDownTestFixture() _connection.Close(); } - private XYColumnTwoPointLine CreateProvider() + private DbTwoPointLine CreateProvider() { - var p = new XYColumnTwoPointLine(System.Data.SQLite.SQLiteFactory.Instance, - "FullUri=file::memory:?cache=shared;ToFullPath=false", "XYColumnTwoPointLineProviderTest", "ID", "X1", "Y1", "X2", "Y2"); + var p = new DbTwoPointLine(System.Data.SQLite.SQLiteFactory.Instance, + "FullUri=file::memory:?cache=shared;ToFullPath=false", "DbTwoPointLineProviderTest", "ID", "X1", "Y1", "X2", "Y2"); return p; From 97a0a893e0b412a1f4bb6ca0967677b91b48087d Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 3 Nov 2018 21:40:37 +0700 Subject: [PATCH 072/186] Add SqlServerSample to Examples/Winforms (and target .Net framework 4.5); Update BruTile NuGet to v2.1 --- .../WinFormSamples/FormMapBox.Designer.cs | 148 +++-- Examples/WinFormSamples/Program.cs | 9 +- .../Properties/Resources.Designer.cs | 36 +- .../Properties/Settings.Designer.cs | 23 +- .../Properties/Settings.settings | 9 +- .../Samples/FormSqlServerOpts.Designer.cs | 349 ++++++++++++ .../Samples/FormSqlServerOpts.cs | 272 ++++++++++ .../Samples/FormSqlServerOpts.resx | 131 +++++ .../WinFormSamples/Samples/SqlServerSample.cs | 107 ++++ .../WinFormSamples/Samples/TileLayerSample.cs | 5 +- Examples/WinFormSamples/SharpMapTileSource.cs | 4 +- Examples/WinFormSamples/WinFormSamples.csproj | 27 +- Examples/WinFormSamples/app.config | 13 +- Examples/WinFormSamples/packages.config | 18 +- SharpMap/Data/Providers/SqlServer2008.cs | 509 +++++++++--------- 15 files changed, 1301 insertions(+), 359 deletions(-) create mode 100644 Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs create mode 100644 Examples/WinFormSamples/Samples/FormSqlServerOpts.cs create mode 100644 Examples/WinFormSamples/Samples/FormSqlServerOpts.resx create mode 100644 Examples/WinFormSamples/Samples/SqlServerSample.cs diff --git a/Examples/WinFormSamples/FormMapBox.Designer.cs b/Examples/WinFormSamples/FormMapBox.Designer.cs index c34295e6..3446ca02 100644 --- a/Examples/WinFormSamples/FormMapBox.Designer.cs +++ b/Examples/WinFormSamples/FormMapBox.Designer.cs @@ -10,33 +10,33 @@ namespace WinFormSamples { partial class FormMapBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } - #region Windows Form Designer generated code + #region Windows Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { this.components = new System.ComponentModel.Container(); this.scMain = new System.Windows.Forms.SplitContainer(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); @@ -67,6 +67,7 @@ private void InitializeComponent() this.lvwDecorations = new System.Windows.Forms.ListView(); this.pgMapDecoration = new System.Windows.Forms.PropertyGrid(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.radioButton12 = new System.Windows.Forms.RadioButton(); ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); this.scMain.Panel2.SuspendLayout(); this.scMain.SuspendLayout(); @@ -84,8 +85,8 @@ private void InitializeComponent() // // scMain // - this.scMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.scMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.scMain.Location = new System.Drawing.Point(174, 0); this.scMain.Name = "scMain"; @@ -94,8 +95,8 @@ private void InitializeComponent() // scMain.Panel2 // this.scMain.Panel2.Controls.Add(this.dataGridView1); - this.scMain.Size = new System.Drawing.Size(892, 635); - this.scMain.SplitterDistance = 449; + this.scMain.Size = new System.Drawing.Size(892, 648); + this.scMain.SplitterDistance = 458; this.scMain.TabIndex = 4; // // dataGridView1 @@ -104,13 +105,13 @@ private void InitializeComponent() this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(0, 0); this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.Size = new System.Drawing.Size(892, 182); + this.dataGridView1.Size = new System.Drawing.Size(892, 186); this.dataGridView1.TabIndex = 4; // // scMapProp // - this.scMapProp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.scMapProp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.scMapProp.Location = new System.Drawing.Point(174, 3); this.scMapProp.Name = "scMapProp"; @@ -124,14 +125,14 @@ private void InitializeComponent() // scMapProp.Panel2 // this.scMapProp.Panel2.Controls.Add(this.pgMap); - this.scMapProp.Size = new System.Drawing.Size(892, 449); + this.scMapProp.Size = new System.Drawing.Size(892, 462); this.scMapProp.SplitterDistance = 651; this.scMapProp.TabIndex = 2; // // tbAngle // this.tbAngle.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tbAngle.Location = new System.Drawing.Point(0, 404); + this.tbAngle.Location = new System.Drawing.Point(0, 417); this.tbAngle.Maximum = 180; this.tbAngle.Minimum = -180; this.tbAngle.Name = "tbAngle"; @@ -148,11 +149,11 @@ private void InitializeComponent() this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool2); this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool); this.toolStripContainer1.ContentPanel.Controls.Add(this.mapBox1); - this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(651, 374); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(651, 387); this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); this.toolStripContainer1.Name = "toolStripContainer1"; - this.toolStripContainer1.Size = new System.Drawing.Size(651, 449); + this.toolStripContainer1.Size = new System.Drawing.Size(651, 462); this.toolStripContainer1.TabIndex = 7; this.toolStripContainer1.Text = "toolStripContainer1"; // @@ -200,7 +201,7 @@ private void InitializeComponent() this.mapBox1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); this.mapBox1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); this.mapBox1.ShowProgressUpdate = true; - this.mapBox1.Size = new System.Drawing.Size(651, 374); + this.mapBox1.Size = new System.Drawing.Size(651, 387); this.mapBox1.TabIndex = 7; this.mapBox1.Text = "mapBox1"; this.mapBox1.WheelZoomMagnitude = 2D; @@ -262,7 +263,7 @@ private void InitializeComponent() this.pgMap.Location = new System.Drawing.Point(0, 0); this.pgMap.Name = "pgMap"; this.pgMap.SelectedObject = this.mapBox1; - this.pgMap.Size = new System.Drawing.Size(237, 449); + this.pgMap.Size = new System.Drawing.Size(237, 462); this.pgMap.TabIndex = 3; // // flowLayoutPanel1 @@ -276,6 +277,7 @@ private void InitializeComponent() this.flowLayoutPanel1.Controls.Add(this.radioButton7); this.flowLayoutPanel1.Controls.Add(this.radioButton8); this.flowLayoutPanel1.Controls.Add(this.radioButton9); + this.flowLayoutPanel1.Controls.Add(this.radioButton12); this.flowLayoutPanel1.Controls.Add(this.radioButton10); this.flowLayoutPanel1.Controls.Add(this.radioButton11); this.flowLayoutPanel1.Controls.Add(this.btnCreateTiles); @@ -287,7 +289,7 @@ private void InitializeComponent() this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 4, 4, 4); - this.flowLayoutPanel1.Size = new System.Drawing.Size(171, 635); + this.flowLayoutPanel1.Size = new System.Drawing.Size(171, 648); this.flowLayoutPanel1.TabIndex = 5; // // radioButton2 @@ -398,7 +400,7 @@ private void InitializeComponent() // radioButton10 // this.radioButton10.AutoSize = true; - this.radioButton10.Location = new System.Drawing.Point(13, 214); + this.radioButton10.Location = new System.Drawing.Point(13, 237); this.radioButton10.Name = "radioButton10"; this.radioButton10.Size = new System.Drawing.Size(105, 17); this.radioButton10.TabIndex = 9; @@ -409,7 +411,7 @@ private void InitializeComponent() // radioButton11 // this.radioButton11.AutoSize = true; - this.radioButton11.Location = new System.Drawing.Point(13, 237); + this.radioButton11.Location = new System.Drawing.Point(13, 260); this.radioButton11.Name = "radioButton11"; this.radioButton11.Size = new System.Drawing.Size(96, 17); this.radioButton11.TabIndex = 12; @@ -417,9 +419,20 @@ private void InitializeComponent() this.radioButton11.UseVisualStyleBackColor = true; this.radioButton11.Click += new System.EventHandler(this.radioButton_Click); // + // radioButton12 + // + this.radioButton12.AutoSize = true; + this.radioButton12.Location = new System.Drawing.Point(13, 214); + this.radioButton12.Name = "radioButton12"; + this.radioButton12.Size = new System.Drawing.Size(120, 17); + this.radioButton12.TabIndex = 13; + this.radioButton12.Text = "SqlServer (LocalDb)"; + this.radioButton12.UseVisualStyleBackColor = true; + this.radioButton12.Click += new System.EventHandler(this.radioButton_Click); + // // btnCreateTiles // - this.btnCreateTiles.Location = new System.Drawing.Point(13, 260); + this.btnCreateTiles.Location = new System.Drawing.Point(13, 283); this.btnCreateTiles.Name = "btnCreateTiles"; this.btnCreateTiles.Size = new System.Drawing.Size(147, 23); this.btnCreateTiles.TabIndex = 11; @@ -430,7 +443,7 @@ private void InitializeComponent() // lvwDecorations // this.lvwDecorations.CheckBoxes = true; - this.lvwDecorations.Location = new System.Drawing.Point(13, 289); + this.lvwDecorations.Location = new System.Drawing.Point(13, 312); this.lvwDecorations.MultiSelect = false; this.lvwDecorations.Name = "lvwDecorations"; this.lvwDecorations.Size = new System.Drawing.Size(147, 58); @@ -443,7 +456,7 @@ private void InitializeComponent() // pgMapDecoration // this.pgMapDecoration.Anchor = System.Windows.Forms.AnchorStyles.None; - this.pgMapDecoration.Location = new System.Drawing.Point(15, 353); + this.pgMapDecoration.Location = new System.Drawing.Point(15, 376); this.pgMapDecoration.Name = "pgMapDecoration"; this.pgMapDecoration.SelectedObject = this.lvwDecorations; this.pgMapDecoration.Size = new System.Drawing.Size(143, 262); @@ -453,7 +466,7 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1066, 635); + this.ClientSize = new System.Drawing.Size(1066, 648); this.Controls.Add(this.scMapProp); this.Controls.Add(this.flowLayoutPanel1); this.Controls.Add(this.scMain); @@ -501,14 +514,22 @@ private void mapBox1_OnMapQueried(FeatureDataTable data) #endregion - private System.Windows.Forms.SplitContainer scMain; - private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.SplitContainer scMain; + private System.Windows.Forms.DataGridView dataGridView1; + private FormSqlServerOpts formSqlServerOpts = null; private void radioButton_Click(object sender, EventArgs e) { Cursor mic = mapBox1.Cursor; mapBox1.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor; + + if (formSqlServerOpts != null) + { + formSqlServerOpts.Close(); + formSqlServerOpts = null; + } + try { //mapImage.ActiveTool = MapImage.Tools.None; @@ -556,7 +577,7 @@ private void radioButton_Click(object sender, EventArgs e) */ mapBox1.Map = TileLayerSample.InitializeMap(tbAngle.Value); ((RadioButton)sender).Text = (mapBox1.Map.BackgroundLayer.Count > 0) - ?((RadioButton)sender).Text = mapBox1.Map.BackgroundLayer[0].LayerName + ? ((RadioButton)sender).Text = mapBox1.Map.BackgroundLayer[0].LayerName : ((RadioButton)sender).Text = mapBox1.Map.Layers[0].LayerName; break; case "PostGis": @@ -565,11 +586,25 @@ private void radioButton_Click(object sender, EventArgs e) case "SpatiaLite": mapBox1.Map = SpatiaLiteSample.InitializeMap(tbAngle.Value); break; + case "SqlServer (LocalDb)": + // create empty map with BruTile basemap + mapBox1.Map = SqlServerSample.InitializeMap(tbAngle.Value); + // set path for LocalDb copy + var connStrBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder(Properties.Settings.Default.SqlServerLocalDbConnectionString); + connStrBuilder.AttachDBFilename = connStrBuilder.AttachDBFilename.Replace("..\\", AppDomain.CurrentDomain.BaseDirectory); + + formSqlServerOpts = new FormSqlServerOpts() + { + MapBox = mapBox1, + LocalDbConnectionString = connStrBuilder.ToString() + }; + formSqlServerOpts.Show(this); + break; case "Oracle": mapBox1.Map = OracleSample.InitializeMap(tbAngle.Value); break; case "shp_TextOnPath": - mapBox1.Map=TextOnPathSample.InitializeMapOrig(tbAngle.Value); + mapBox1.Map = TextOnPathSample.InitializeMapOrig(tbAngle.Value); break; case "GdiImageLayer": mapBox1.Map = GdiImageLayerSample.InitializeMap(tbAngle.Value); @@ -588,7 +623,7 @@ private void radioButton_Click(object sender, EventArgs e) mapBox1.Map.Decorations.Add(md); } } - + mapBox1.Map.Size = Size; mapBox1.Refresh(); } @@ -633,7 +668,7 @@ private void mapImage_SizeChanged(object sender, EventArgs e) private void tbAngle_Scroll(object sender, EventArgs e) { - System.Drawing.Drawing2D.Matrix matrix = new Matrix(); + System.Drawing.Drawing2D.Matrix matrix = new Matrix(); if (tbAngle.Value != 0f) matrix.RotateAt(tbAngle.Value, new PointF(mapBox1.Width * 0.5f, mapBox1.Height * 0.5f)); @@ -647,7 +682,7 @@ private void tbAngle_Scroll(object sender, EventArgs e) private void radioButton2_MouseUp(object sender, MouseEventArgs e) { var rb = sender as RadioButton; - if (rb== null) return; + if (rb == null) return; if (e.Button != MouseButtons.Right) return; @@ -671,7 +706,7 @@ private void radioButton2_MouseUp(object sender, MouseEventArgs e) if (map == null) return; - + //Add checked Map decorations foreach (ListViewItem checkedItem in lvwDecorations.CheckedItems) { @@ -697,7 +732,7 @@ private void lvwDecorations_ItemChecked(object sender, ItemCheckedEventArgs e) IMapDecoration ins = Activator.CreateInstance(mdType) as IMapDecoration; if (ins != null) { - mapBox1.Map.Decorations.Add(ins); + mapBox1.Map.Decorations.Add(ins); } } else @@ -719,12 +754,12 @@ private void lvwDecorations_ItemChecked(object sender, ItemCheckedEventArgs e) private void lvwDecorations_SelectedIndexChanged(object sender, EventArgs e) { if (lvwDecorations.SelectedItems.Count == 0) - { + { pgMapDecoration.SelectedObject = null; return; } - var lvwi = (ListViewItem) lvwDecorations.SelectedItems[0]; + var lvwi = (ListViewItem)lvwDecorations.SelectedItems[0]; if (!lvwi.Checked) { pgMapDecoration.SelectedObject = null; @@ -793,6 +828,7 @@ private void btnCreateTiles_Click(object sender, EventArgs e) private Button btnTool; private ToolTip toolTip1; private Button btnTool2; - } + private RadioButton radioButton12; + } } diff --git a/Examples/WinFormSamples/Program.cs b/Examples/WinFormSamples/Program.cs index 672e93ed..33f9f86d 100644 --- a/Examples/WinFormSamples/Program.cs +++ b/Examples/WinFormSamples/Program.cs @@ -21,11 +21,18 @@ private static void Main() new CoordinateTransformationFactory(), SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + // plug-in WebMercator so that correct spherical definition is directly available to Layer Transformations using SRID + var pcs = (ProjectedCoordinateSystem)ProjectedCoordinateSystem.WebMercator; + css.AddCoordinateSystem((int)pcs.AuthorityCode, pcs); + GeoAPI.GeometryServiceProvider.Instance = gss; SharpMap.Session.Instance .SetGeometryServices(gss) .SetCoordinateSystemServices(css) .SetCoordinateSystemRepository(css); + + // for SqlServerSample referencing SharpMap.SqlServerSpatialObjects + //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); @@ -33,4 +40,4 @@ private static void Main() } } -} \ No newline at end of file +} diff --git a/Examples/WinFormSamples/Properties/Resources.Designer.cs b/Examples/WinFormSamples/Properties/Resources.Designer.cs index 20a7f6f9..ef66e5d8 100644 --- a/Examples/WinFormSamples/Properties/Resources.Designer.cs +++ b/Examples/WinFormSamples/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.34209 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace WinFormSamples.Properties { /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap OutfallSmall { get { @@ -71,7 +71,7 @@ internal static System.Drawing.Bitmap OutfallSmall { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap PumpSmall { get { @@ -81,7 +81,7 @@ internal static System.Drawing.Bitmap PumpSmall { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap view_left_right { get { @@ -91,7 +91,7 @@ internal static System.Drawing.Bitmap view_left_right { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap view_top_bottom { get { @@ -101,7 +101,7 @@ internal static System.Drawing.Bitmap view_top_bottom { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ZoomToExtents1 { get { diff --git a/Examples/WinFormSamples/Properties/Settings.Designer.cs b/Examples/WinFormSamples/Properties/Settings.Designer.cs index c0053ef3..2beb8864 100644 --- a/Examples/WinFormSamples/Properties/Settings.Designer.cs +++ b/Examples/WinFormSamples/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace WinFormSamples.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -46,7 +46,18 @@ public string SpatiaLiteConnectionString { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDb)\\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=.." + + "\\GeoData\\SqlServer\\SqlServerSample.mdf;")] + public string SqlServerLocalDbConnectionString { + get { + return ((string)(this["SqlServerLocalDbConnectionString"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Microsoft.ACE.OLEDB.15.0")] public string OleDbProvider { get { return ((string)(this["OleDbProvider"])); diff --git a/Examples/WinFormSamples/Properties/Settings.settings b/Examples/WinFormSamples/Properties/Settings.settings index 44f1711c..30cf6cd0 100644 --- a/Examples/WinFormSamples/Properties/Settings.settings +++ b/Examples/WinFormSamples/Properties/Settings.settings @@ -16,8 +16,15 @@ </SerializableConnectionString> Data Source=GeoData\SpatiaLite\sample.sqlite; + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=(LocalDb)\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=..\GeoData\SqlServer\SqlServerSample.mdf;</ConnectionString> +</SerializableConnectionString> + Data Source=(LocalDb)\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=..\GeoData\SqlServer\SqlServerSample.mdf; + - + Microsoft.ACE.OLEDB.15.0 \ No newline at end of file diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs new file mode 100644 index 00000000..2a95fd42 --- /dev/null +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs @@ -0,0 +1,349 @@ +namespace WinFormSamples.Samples +{ + partial class FormSqlServerOpts + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSqlServerOpts)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.chkSpatialValidate = new System.Windows.Forms.CheckBox(); + this.optSpatialGeog = new System.Windows.Forms.RadioButton(); + this.optSpatialGeom = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.optExtentsIndividual = new System.Windows.Forms.RadioButton(); + this.labExtentsTime = new System.Windows.Forms.Label(); + this.cmdGetExtents = new System.Windows.Forms.Button(); + this.optExtentsAggregate = new System.Windows.Forms.RadioButton(); + this.optExtentsSpatialIndex = new System.Windows.Forms.RadioButton(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.chkHintsSeek = new System.Windows.Forms.CheckBox(); + this.chkHintNoLock = new System.Windows.Forms.CheckBox(); + this.chkHintIndex = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.optDefQueryName = new System.Windows.Forms.RadioButton(); + this.optDefQueryId = new System.Windows.Forms.RadioButton(); + this.optDefQueryNone = new System.Windows.Forms.RadioButton(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.optDataProviderNative = new System.Windows.Forms.RadioButton(); + this.optDataProviderWKB = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.chkSpatialValidate); + this.groupBox1.Controls.Add(this.optSpatialGeog); + this.groupBox1.Controls.Add(this.optSpatialGeom); + this.groupBox1.Location = new System.Drawing.Point(12, 78); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(191, 116); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Spatial Type"; + // + // chkSpatialValidate + // + this.chkSpatialValidate.AutoSize = true; + this.chkSpatialValidate.Location = new System.Drawing.Point(21, 69); + this.chkSpatialValidate.Name = "chkSpatialValidate"; + this.chkSpatialValidate.Size = new System.Drawing.Size(118, 17); + this.chkSpatialValidate.TabIndex = 2; + this.chkSpatialValidate.Text = "Validate geometries"; + this.chkSpatialValidate.UseVisualStyleBackColor = true; + // + // optSpatialGeog + // + this.optSpatialGeog.AutoSize = true; + this.optSpatialGeog.Location = new System.Drawing.Point(21, 43); + this.optSpatialGeog.Name = "optSpatialGeog"; + this.optSpatialGeog.Size = new System.Drawing.Size(101, 17); + this.optSpatialGeog.TabIndex = 1; + this.optSpatialGeog.Text = "SQL Geography"; + this.optSpatialGeog.UseVisualStyleBackColor = true; + // + // optSpatialGeom + // + this.optSpatialGeom.AutoSize = true; + this.optSpatialGeom.Location = new System.Drawing.Point(21, 19); + this.optSpatialGeom.Name = "optSpatialGeom"; + this.optSpatialGeom.Size = new System.Drawing.Size(94, 17); + this.optSpatialGeom.TabIndex = 0; + this.optSpatialGeom.Text = "SQL Geometry"; + this.optSpatialGeom.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.optExtentsIndividual); + this.groupBox2.Controls.Add(this.labExtentsTime); + this.groupBox2.Controls.Add(this.cmdGetExtents); + this.groupBox2.Controls.Add(this.optExtentsAggregate); + this.groupBox2.Controls.Add(this.optExtentsSpatialIndex); + this.groupBox2.Location = new System.Drawing.Point(218, 77); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(191, 117); + this.groupBox2.TabIndex = 2; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Extents Mode"; + // + // optExtentsIndividual + // + this.optExtentsIndividual.AutoSize = true; + this.optExtentsIndividual.Location = new System.Drawing.Point(21, 19); + this.optExtentsIndividual.Name = "optExtentsIndividual"; + this.optExtentsIndividual.Size = new System.Drawing.Size(155, 17); + this.optExtentsIndividual.TabIndex = 1; + this.optExtentsIndividual.Text = "Individual features (slowest)"; + this.optExtentsIndividual.UseVisualStyleBackColor = true; + // + // labExtentsTime + // + this.labExtentsTime.AutoSize = true; + this.labExtentsTime.Location = new System.Drawing.Point(102, 92); + this.labExtentsTime.Name = "labExtentsTime"; + this.labExtentsTime.Size = new System.Drawing.Size(0, 13); + this.labExtentsTime.TabIndex = 6; + // + // cmdGetExtents + // + this.cmdGetExtents.Location = new System.Drawing.Point(21, 87); + this.cmdGetExtents.Name = "cmdGetExtents"; + this.cmdGetExtents.Size = new System.Drawing.Size(75, 23); + this.cmdGetExtents.TabIndex = 5; + this.cmdGetExtents.Text = "Get Extents"; + this.cmdGetExtents.UseVisualStyleBackColor = true; + // + // optExtentsAggregate + // + this.optExtentsAggregate.AutoSize = true; + this.optExtentsAggregate.Checked = true; + this.optExtentsAggregate.ForeColor = System.Drawing.Color.SteelBlue; + this.optExtentsAggregate.Location = new System.Drawing.Point(21, 42); + this.optExtentsAggregate.Name = "optExtentsAggregate"; + this.optExtentsAggregate.Size = new System.Drawing.Size(119, 17); + this.optExtentsAggregate.TabIndex = 4; + this.optExtentsAggregate.TabStop = true; + this.optExtentsAggregate.Text = "Aggregate (v2012+)"; + this.optExtentsAggregate.UseVisualStyleBackColor = true; + // + // optExtentsSpatialIndex + // + this.optExtentsSpatialIndex.AutoSize = true; + this.optExtentsSpatialIndex.Location = new System.Drawing.Point(21, 65); + this.optExtentsSpatialIndex.Name = "optExtentsSpatialIndex"; + this.optExtentsSpatialIndex.Size = new System.Drawing.Size(161, 17); + this.optExtentsSpatialIndex.TabIndex = 3; + this.optExtentsSpatialIndex.Text = "Spatial index (Geometry only)"; + this.optExtentsSpatialIndex.UseVisualStyleBackColor = true; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.chkHintsSeek); + this.groupBox3.Controls.Add(this.chkHintNoLock); + this.groupBox3.Controls.Add(this.chkHintIndex); + this.groupBox3.Location = new System.Drawing.Point(218, 200); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(191, 86); + this.groupBox3.TabIndex = 3; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Table Hints"; + // + // chkHintsSeek + // + this.chkHintsSeek.AutoSize = true; + this.chkHintsSeek.Location = new System.Drawing.Point(21, 65); + this.chkHintsSeek.Name = "chkHintsSeek"; + this.chkHintsSeek.Size = new System.Drawing.Size(81, 17); + this.chkHintsSeek.TabIndex = 2; + this.chkHintsSeek.Text = "Force Seek"; + this.chkHintsSeek.UseVisualStyleBackColor = true; + // + // chkHintNoLock + // + this.chkHintNoLock.AutoSize = true; + this.chkHintNoLock.Location = new System.Drawing.Point(21, 42); + this.chkHintNoLock.Name = "chkHintNoLock"; + this.chkHintNoLock.Size = new System.Drawing.Size(67, 17); + this.chkHintNoLock.TabIndex = 1; + this.chkHintNoLock.Text = "No Lock"; + this.chkHintNoLock.UseVisualStyleBackColor = true; + // + // chkHintIndex + // + this.chkHintIndex.AutoSize = true; + this.chkHintIndex.Location = new System.Drawing.Point(21, 20); + this.chkHintIndex.Name = "chkHintIndex"; + this.chkHintIndex.Size = new System.Drawing.Size(82, 17); + this.chkHintIndex.TabIndex = 0; + this.chkHintIndex.Text = "Force Index"; + this.chkHintIndex.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 294); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(398, 241); + this.label1.TabIndex = 4; + this.label1.Text = resources.GetString("label1.Text"); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.optDefQueryName); + this.groupBox4.Controls.Add(this.optDefQueryId); + this.groupBox4.Controls.Add(this.optDefQueryNone); + this.groupBox4.Location = new System.Drawing.Point(12, 200); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(191, 86); + this.groupBox4.TabIndex = 5; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Definition Query"; + // + // optDefQueryName + // + this.optDefQueryName.AutoSize = true; + this.optDefQueryName.Location = new System.Drawing.Point(21, 62); + this.optDefQueryName.Name = "optDefQueryName"; + this.optDefQueryName.Size = new System.Drawing.Size(162, 17); + this.optDefQueryName.TabIndex = 2; + this.optDefQueryName.Text = "Name IN (\'Taipei\', \'Bangkok\')"; + this.optDefQueryName.UseVisualStyleBackColor = true; + // + // optDefQueryId + // + this.optDefQueryId.AutoSize = true; + this.optDefQueryId.Location = new System.Drawing.Point(21, 39); + this.optDefQueryId.Name = "optDefQueryId"; + this.optDefQueryId.Size = new System.Drawing.Size(165, 17); + this.optDefQueryId.TabIndex = 1; + this.optDefQueryId.Text = "Id IN (1, 3, 5, 7, 9, 11, 13, 15)"; + this.optDefQueryId.UseVisualStyleBackColor = true; + // + // optDefQueryNone + // + this.optDefQueryNone.AutoSize = true; + this.optDefQueryNone.Checked = true; + this.optDefQueryNone.Location = new System.Drawing.Point(21, 19); + this.optDefQueryNone.Name = "optDefQueryNone"; + this.optDefQueryNone.Size = new System.Drawing.Size(51, 17); + this.optDefQueryNone.TabIndex = 0; + this.optDefQueryNone.TabStop = true; + this.optDefQueryNone.Text = "None"; + this.optDefQueryNone.UseVisualStyleBackColor = true; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.optDataProviderNative); + this.groupBox5.Controls.Add(this.optDataProviderWKB); + this.groupBox5.Location = new System.Drawing.Point(14, 7); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(395, 65); + this.groupBox5.TabIndex = 6; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Data Provider"; + // + // optDataProviderNative + // + this.optDataProviderNative.AutoSize = true; + this.optDataProviderNative.Enabled = false; + this.optDataProviderNative.Location = new System.Drawing.Point(19, 42); + this.optDataProviderNative.Name = "optDataProviderNative"; + this.optDataProviderNative.Size = new System.Drawing.Size(340, 17); + this.optDataProviderNative.TabIndex = 1; + this.optDataProviderNative.Text = "SharpMap.SqlServerSpatialObjects [queries using Sql native types]"; + this.optDataProviderNative.UseVisualStyleBackColor = true; + // + // optDataProviderWKB + // + this.optDataProviderWKB.AutoSize = true; + this.optDataProviderWKB.Checked = true; + this.optDataProviderWKB.Location = new System.Drawing.Point(19, 19); + this.optDataProviderWKB.Name = "optDataProviderWKB"; + this.optDataProviderWKB.Size = new System.Drawing.Size(331, 17); + this.optDataProviderWKB.TabIndex = 0; + this.optDataProviderWKB.TabStop = true; + this.optDataProviderWKB.Text = "SharpMap.Data.Providers.SqlServer2008(+) [queries using WKB]"; + this.optDataProviderWKB.UseVisualStyleBackColor = true; + // + // FormSqlServerOpts + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(424, 545); + this.Controls.Add(this.groupBox5); + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormSqlServerOpts"; + this.Text = "FormSqlServerOpts"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton optSpatialGeog; + private System.Windows.Forms.RadioButton optSpatialGeom; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton optExtentsSpatialIndex; + private System.Windows.Forms.RadioButton optExtentsIndividual; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.CheckBox chkHintsSeek; + private System.Windows.Forms.CheckBox chkHintNoLock; + private System.Windows.Forms.CheckBox chkHintIndex; + private System.Windows.Forms.CheckBox chkSpatialValidate; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RadioButton optExtentsAggregate; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.RadioButton optDefQueryName; + private System.Windows.Forms.RadioButton optDefQueryId; + private System.Windows.Forms.RadioButton optDefQueryNone; + private System.Windows.Forms.Label labExtentsTime; + private System.Windows.Forms.Button cmdGetExtents; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.RadioButton optDataProviderNative; + private System.Windows.Forms.RadioButton optDataProviderWKB; + } +} diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs new file mode 100644 index 00000000..edf2defa --- /dev/null +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs @@ -0,0 +1,272 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using SharpMap; +using SharpMap.Data.Providers; +using SharpMap.Layers; + +namespace WinFormSamples.Samples +{ + public partial class FormSqlServerOpts : Form + { + public SharpMap.Forms.MapBox MapBox { get; set; } + public string LocalDbConnectionString { get; set; } + + public FormSqlServerOpts() + { + InitializeComponent(); + } + + protected override void OnLoad(EventArgs e) + { + // attach LocalDb and ensure spatial indexes are created for testing + SqlServerSample.InitialiseSpatialIndexes(LocalDbConnectionString); + + WireHandlers(); + + base.OnLoad(e); + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + } + + private void WireHandlers() + { + this.optDataProviderWKB.Click += this.optDataProvider_Click; + this.optDataProviderNative.Click += this.optDataProvider_Click; + + this.optSpatialGeog.Click += this.optSpatial_Click; + this.optSpatialGeom.Click += this.optSpatial_Click; + this.chkSpatialValidate.CheckedChanged += this.chkSpatialValidate_Click; + + this.optExtentsIndividual.Click += this.optExtents_Click; + this.optExtentsAggregate.Click += this.optExtents_Click; + this.optExtentsSpatialIndex.Click += this.optExtents_Click; + this.cmdGetExtents.Click += this.cmdGetExtents_Click; + + this.chkHintIndex.CheckedChanged += this.chkHints_Click; + this.chkHintNoLock.CheckedChanged += this.chkHints_Click; + this.chkHintsSeek.CheckedChanged += this.chkHints_Click; + + this.optDefQueryNone.Click += this.optDefQuery_Click; + this.optDefQueryId.Click += this.optDefQuery_Click; + this.optDefQueryName.Click += this.optDefQuery_Click; + } + + private void optDataProvider_Click(object sender, EventArgs e) + { + // TODO - remove IF statement once integrated with SharpMap.SqlServerSpatialObjects + if (sender == this.optDataProviderNative) + { + optDataProviderNative.Checked = false; + optDataProviderWKB.Checked = true; + + MessageBox.Show("Data Provider", "To be added to sample in near future..."); + return; + } + + if (sender == this.optDataProviderNative && optSpatialGeog.Checked) + { + optDataProviderNative.Checked = false; + optDataProviderWKB.Checked = true; + + MessageBox.Show("Data Provider", "SharpMap.SqlServerSpatialObjects currently only support Geometry"); + } + // re-create layers + optSpatial_Click(null, null); + } + + private void optSpatial_Click(object sender, EventArgs e) + { + // reset map layers + MapBox.Map.Layers.Clear(); + + SharpMap.Layers.VectorLayer spatialLyr; + + string spatialTable; + string geomColumn; + SqlServerSpatialObjectType geomType; + Brush symBrush; + + if (optSpatialGeog.Checked) + { + spatialTable = "[dbo].[CitiesSqlGeog]"; + geomColumn = "Geog4326"; + geomType = SqlServerSpatialObjectType.Geography; + symBrush = new SolidBrush(Color.DodgerBlue); + } + else + { + spatialTable = "[dbo].[CitiesSqlGeom]"; + geomColumn = "Geom4326"; + geomType = SqlServerSpatialObjectType.Geometry; + symBrush = new SolidBrush(Color.Red); + } + + spatialLyr = new SharpMap.Layers.VectorLayer("Spatial"); + if (optDataProviderWKB.Checked) + spatialLyr.DataSource = new SqlServer2008(LocalDbConnectionString, spatialTable, geomColumn, "Id", geomType); + else + { + //TODO - uncomment when reference is added to SharpMap.SqlServerSpatialObjects + //spatialLyr.DataSource = new SqlServer2008Ex (LocalDbConnectionString, spatialTable, geomColumn, "Id"); + } + + + spatialLyr.SRID = 4326; + spatialLyr.TargetSRID = 3857; + + spatialLyr.Style.PointColor = symBrush; + + //Set up a label layer + var labelLyr = new SharpMap.Layers.LabelLayer("Labels") + { + DataSource = spatialLyr.DataSource, + //SRID=4326, + TargetSRID = 3857, + Enabled = true, + LabelColumn = "Name", + //MultipartGeometryBehaviour = SharpMap.Layers.LabelLayer.MultipartGeometryBehaviourEnum.Largest, + LabelFilter = SharpMap.Rendering.LabelCollisionDetection.QuickAccurateCollisionDetectionMethod, + Style = new SharpMap.Styles.LabelStyle() + { + ForeColor = System.Drawing.Color.DarkSlateGray, + Font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSerif, 8), + //BackColor = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(128, 255, 0, 0)), + HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Left, + CollisionDetection = true, + Offset = new PointF(10, 0) + //MaxVisible = 90, + //MinVisible = 30 + } + }; + + + MapBox.Map.Layers.Add(spatialLyr); + MapBox.Map.Layers.Add(labelLyr); + + // configure data provider options + chkSpatialValidate_Click(null, null); + optExtents_Click(null, null); + chkHints_Click(null, null); + optDefQuery_Click(null, null); + + MapBox.Refresh(); + } + + private SqlServer2008 GetSqlServerDataProvider() + { + if (MapBox.Map.Layers.Count == 0) + return null; + + VectorLayer lyr = (VectorLayer)MapBox.Map.Layers[0]; + return (SqlServer2008)lyr.DataSource; + } + + private void chkSpatialValidate_Click(object sender, EventArgs e) + { + var sqlDP = GetSqlServerDataProvider(); + if (sqlDP == null) return; + + sqlDP.ValidateGeometries = chkSpatialValidate.Checked; + + if (sender != null) + MapBox.Refresh(); + } + + private void optExtents_Click(object sender, EventArgs e) + { + var sqlDP = GetSqlServerDataProvider(); + if (sqlDP == null) return; + + try + { + if (optExtentsIndividual.Checked) + sqlDP.ExtentsMode = SqlServer2008ExtentsMode.QueryIndividualFeatures; + else if (optExtentsAggregate.Checked) + sqlDP.ExtentsMode = SqlServer2008ExtentsMode.EnvelopeAggregate; + else if (optExtentsSpatialIndex.Checked) + { + sqlDP.ExtentsMode = SqlServer2008ExtentsMode.SpatialIndex; + MessageBox.Show("Are you sure? \nThis mode uses the extent of the Spatial Index GRID, " + + "not the extents of the DATA, and does not take into account any Definition Query. " + + "\nTo see this in action, click Get Extents for each Extent mode and see the resulting envelope output to Console.", + "Extents Mode", MessageBoxButtons.OK, MessageBoxIcon.Question); + } + + if (sender != null) + MapBox.Refresh(); + } + catch (Exception ex) + { + this.optExtentsSpatialIndex.Checked = false; + MessageBox.Show(ex.Message, "Extents Mode", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + + private void chkHints_Click(object sender, EventArgs e) + { + var sqlDP = GetSqlServerDataProvider(); + if (sqlDP == null) return; + + sqlDP.NoLockHint = chkHintNoLock.Checked; + + sqlDP.ForceSeekHint = chkHintsSeek.Checked; + + if (chkHintIndex.Checked) + { + if (optSpatialGeom.Checked) + sqlDP.ForceIndex = SqlServerSample.GeomSpatialIndex; + else + sqlDP.ForceIndex = SqlServerSample.GeogSpatialIndex; + } + else + sqlDP.ForceIndex = string.Empty; + + if (sender != null) + MapBox.Refresh(); + } + + private void optDefQuery_Click(object sender, EventArgs e) + { + var sqlDP = GetSqlServerDataProvider(); + if (sqlDP == null) return; + + if (optDefQueryName.Checked) + sqlDP.DefinitionQuery = optDefQueryName.Text; + else if (optDefQueryId.Checked) + sqlDP.DefinitionQuery = optDefQueryId.Text; + else + sqlDP.DefinitionQuery = string.Empty; + + if (sender != null) + MapBox.Refresh(); + } + + private void cmdGetExtents_Click(object sender, EventArgs e) + { + labExtentsTime.Text = ""; + + var sqlDP = GetSqlServerDataProvider(); + if (sqlDP == null) return; + + var stopWatch = System.Diagnostics.Stopwatch.StartNew(); + + var env = sqlDP.GetExtents(); + stopWatch.Stop(); + labExtentsTime.Text = stopWatch.ElapsedMilliseconds.ToString("0.000") + "ms"; + + Console.WriteLine("Spatial Extents " + env.ToString()); + + } + + } +} diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx b/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx new file mode 100644 index 00000000..32dc2701 --- /dev/null +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Notes: +The LocalDb mdf is packaged with this sample and contains 2 tables with identical data in WGS84 for 16 SE Asian cities using different spatial types (Geometry vs Geography). Map uses WebMercator, with layers transformed on-the-fly. + +Select either SQL Geometry or SQL Geography to switch between spatial types (clears and re-loads vector layer). The different options presented here alter the behaviour of data provider as it selects data from the database. SQL queries are output to console so you can see the syntax used. Repeating Get Extents will usually show faster times due to Sql Server caching of query plan. + +You may need to install Sql Server LocalDb for this sample to work. LocalDb runs on the application thread - performance will be noticably slower than running against a fully-fledged SQL Server instance. Spatial Indexes are created once per session - please be patient. + +Finally, if you want to use SharpMap.SqlServerSpatialObjects in your own work, refer to ReadMe.txt in that project for configuration and runtime requirements. + + + \ No newline at end of file diff --git a/Examples/WinFormSamples/Samples/SqlServerSample.cs b/Examples/WinFormSamples/Samples/SqlServerSample.cs new file mode 100644 index 00000000..b9700c61 --- /dev/null +++ b/Examples/WinFormSamples/Samples/SqlServerSample.cs @@ -0,0 +1,107 @@ +using System; +using System.Configuration; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using GeoAPI.Geometries; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using System.Data.SqlClient; + +namespace WinFormSamples.Samples +{ + static class SqlServerSample + { + + public const string GeogSpatialIndex = "SIDX_CitiesSqlGeog_Geog4326"; + public const string GeomSpatialIndex = "SIDX_CitiesSqlGeom_Geom4326"; + + public static SharpMap.Map InitializeMap(float angle) + { + //Initialize a new map of size 'imagesize' + SharpMap.Map map = new SharpMap.Map + { + SRID = 3857 + }; + + // Add bru-tile map background + var cacheFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileCache"); + var lyrBruTile = new TileAsyncLayer( + BruTile.Predefined.KnownTileSources.Create(BruTile.Predefined.KnownTileSource.OpenStreetMap), + "Tiles", Color.Transparent, true, cacheFolder) + { + SRID = 3857 + }; + + map.BackgroundLayer.Add(lyrBruTile); + map.BackColor = System.Drawing.Color.LightBlue; + map.ZoomToBox(new Envelope(6943700, 19849100, -1472900, 6198900)); + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + + public static void InitialiseSpatialIndexes(string connStr) + { + var table = "dbo.CitiesSqlGeom"; + var idx = GeomSpatialIndex; + + if (!DoesSpatialIndexExist(connStr, table, idx)) + { + CreateSpatialIndex(connStr, + $"CREATE SPATIAL INDEX [{idx}] ON {table}(Geom4326) WITH(BOUNDING_BOX = (96, -7, 140, 40))"); + } + + table = "dbo.CitiesSqlGeog"; + idx = GeogSpatialIndex; + if (!DoesSpatialIndexExist(connStr, table, idx)) + { + CreateSpatialIndex(connStr, $"CREATE SPATIAL INDEX [{idx}] ON {table}(Geog4326);"); + } + + } + + private static bool DoesSpatialIndexExist(string connStr, string tableName, string indexName) + { + int indexId = 0; + + var sql = $"SELECT object_id FROM sys.indexes WHERE object_id = OBJECT_ID('{tableName}') AND name='{indexName}'"; + + using (var conn = new System.Data.SqlClient.SqlConnection(connStr)) + { + using (var cmd = new SqlCommand(sql, conn)) + { + conn.Open(); + using (var reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + indexId = reader.GetInt32(0); + } + } + } + } + return (indexId > 0); + } + + private static void CreateSpatialIndex(string connStr, string sql) + { + using (var conn = new System.Data.SqlClient.SqlConnection(connStr)) + { + using (var cmd = new SqlCommand(sql, conn)) + { + conn.Open(); + cmd.ExecuteNonQuery(); + } + } + } + + } +} diff --git a/Examples/WinFormSamples/Samples/TileLayerSample.cs b/Examples/WinFormSamples/Samples/TileLayerSample.cs index fbc3799f..3d6cd29e 100644 --- a/Examples/WinFormSamples/Samples/TileLayerSample.cs +++ b/Examples/WinFormSamples/Samples/TileLayerSample.cs @@ -134,7 +134,10 @@ private static SharpMap.Map InitializeMapOsmWithVariableLayerCollection(float an { var map = new SharpMap.Map(); - var tileLayer = new SharpMap.Layers.TileAsyncLayer(new BruTile.Web.OsmTileSource(), "TileLayer - OSM with VLC"); + var tileSources = KnownTileSources.Create(); + var tileSource = KnownTileSources.Create(KnownTileSource.OpenStreetMap); + + var tileLayer = new SharpMap.Layers.TileAsyncLayer(tileSource, "TileLayer - OSM with VLC"); map.BackgroundLayer.Add(tileLayer); var vl = new SharpMap.Layers.VectorLayer("Vilnius Transport Data - Bus", diff --git a/Examples/WinFormSamples/SharpMapTileSource.cs b/Examples/WinFormSamples/SharpMapTileSource.cs index 3aa0a869..34126afa 100644 --- a/Examples/WinFormSamples/SharpMapTileSource.cs +++ b/Examples/WinFormSamples/SharpMapTileSource.cs @@ -48,6 +48,8 @@ public Extent Extent get { throw new NotImplementedException(); } } + public Attribution Attribution => throw new NotImplementedException(); + public byte[] GetTile(TileInfo tileInfo) { return provider.GetTile(tileInfo); @@ -150,4 +152,4 @@ private Image CreateTile(TileInfo info) } } } -} \ No newline at end of file +} diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index 9a027413..7e74dd25 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -14,7 +14,7 @@ 3.5 - v4.0 + v4.5 ..\..\ @@ -57,17 +57,11 @@ false - - ..\..\packages\BruTile.0.18.1\lib\net40\BruTile.dll - True - - - ..\..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll - True + + ..\..\packages\BruTile.2.0.1\lib\net45\BruTile.dll - - ..\..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll - True + + ..\..\packages\BruTile.Desktop.2.0.1\lib\net45\BruTile.Desktop.dll ..\..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll @@ -119,6 +113,7 @@ ..\..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll + @@ -170,15 +165,25 @@ + + Form + + + FormSqlServerOpts.cs + + + + FormSqlServerOpts.cs + PreserveNewest diff --git a/Examples/WinFormSamples/app.config b/Examples/WinFormSamples/app.config index 6dbc7a4f..21c70370 100644 --- a/Examples/WinFormSamples/app.config +++ b/Examples/WinFormSamples/app.config @@ -1,4 +1,4 @@ - + @@ -9,9 +9,12 @@ - - - + + + @@ -48,7 +51,7 @@ - + diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index 1eda4f3d..bf3a3185 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -1,19 +1,19 @@  - - + + - - - + + + - - - - + + + + \ No newline at end of file diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index cf9b8b6c..8c00f0bc 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -20,7 +20,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Note - Supports both Geometry AND Geography types for SQL Server 2008 onwards. -// The '2008' suffix in the class name is to distinguish from MsSqlSpatial provider (Sql Server 2005). +// The '2008' suffix in the class name is to distinguish from SharpMap.Data.Providers.MsSqlSpatial provider (Sql Server 2005). // SqlServer2008 requests WKB from the database (hence will work with Sql Server 2008, 2012, 2016 etc), // and WKB is then parsed to an IGeometry instance using SharpMap.Converters.WellKnownBinary.GeometryFromWKB // @@ -34,7 +34,7 @@ using System.Globalization; using System.Text; using GeoAPI.Geometries; - +using Common.Logging; namespace SharpMap.Data.Providers { @@ -65,12 +65,12 @@ public enum SqlServer2008ExtentsMode QueryIndividualFeatures, /// - /// Directly reads the bounds of the spatial index from the system tables (very fast, but does not take into account) + /// Directly reads the bounds of the spatial index from the system tables (very fast, but does not take actual data extents or into account) /// SpatialIndex, /// - /// Uses the EnvelopeAggregate aggregate function introduced in SQL Server 2012 + /// Uses the EnvelopeAggregate aggregate function introduced in SQL Server 2012 (recommended) /// EnvelopeAggregate } @@ -93,8 +93,92 @@ public enum SqlServer2008ExtentsMode [Serializable] public class SqlServer2008 : BaseProvider { + static readonly ILog _logger = LogManager.GetLogger(typeof(SqlServer2008)); + + // column name used in queries for retrieving spatial column as WKB + private const string SharpMapWkb = "sharpmapwkb"; + + // required for restricting extents of WKT (eg bbox) used to query SqlGeography + private static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 179.999999999, -89.999999999, 89.999999999); + + // List of columns EXCLUDING the spatial column eg: [Id], [Name], [Geom4326] >> [Id], [Name] + // _attributeColumnNames is used when feature "attributes" should be returned (eg OnExecuteIntersectionQuery, GetFeature). + // The Spatial column should NOT be retrieved directly without reference to Microsoft.SqlServerTypes, + // as it will cause DataAdaptor.Fill() to throw an error when attempting to determine type for spatial column. + private readonly string _attributeColumnNames; + + // SqlGeography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) + // SqlGeometry : orientation is irrelevant + // GeometryToWKT returns Envelope with clockwise ring, so need to call .ReorientObject() for WKT used to query SqlGeography + private readonly string _reorientObject; + + // used for static spatial methods in SQL string + private readonly string _spatialTypeString; + + private SqlServer2008ExtentsMode _extentsMode; + /// - /// Initializes a new connection to SQL Server for Geometry spatial type in column named SHAPE + /// Data table schema + /// + public string TableSchema { get; private set; } + + /// + /// Data table name + /// + public string Table { get; private set; } + + /// + /// Gets a value indicating the qualified schema table name in square brackets + /// + protected string QualifiedTable { get; private set; } + + /// + /// Name of column that contains the Object ID + /// + public string ObjectIdColumn { get; private set; } + + /// + /// Name of geometry column + /// + public string GeometryColumn { get; private set; } + + /// + /// Spatial object type for + /// + public SqlServerSpatialObjectType SpatialObjectType { get; private set; } + + /// + /// Gets/Sets whether all passed to and retreieved from SqlServer should be made valid using this function. + /// + public Boolean ValidateGeometries { get; set; } + + /// + /// When true, uses the FORCESEEK table hint. + /// + public bool ForceSeekHint { get; set; } + + /// + /// When true, uses the NOLOCK table hint. + /// + public bool NoLockHint { get; set; } + + /// + /// When set, forces use of the specified index + /// + public string ForceIndex { get; set; } + + /// + /// If set, sends an Option MaxDop to the SQL-Server to override the Parallel Execution of indexes + /// This can be used if Spatial indexes are not used on SQL-Servers with many processors. + /// + /// MaxDop = 0 // Default behaviour + /// MaxDop = 1 // Suppress Parallel execution of Queryplan + /// MaxDop = [2..n] // Use X cores in in execution plan + /// + public int MaxDop { get; set; } + + /// + /// Initializes a new connection to SQL Server for Geometry spatial type in column named SHAPE and default Extents mode /// /// Connectionstring /// Name of data table @@ -105,7 +189,7 @@ public SqlServer2008(string connectionStr, string tablename, string oidColumnNam } /// - /// Initializes a new connection to SQL Server for spatial column named SHAPE + /// Initializes a new connection to SQL Server for spatial column named SHAPE and default Extents mode /// /// Connectionstring /// Name of data table @@ -184,10 +268,13 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum { case SqlServerSpatialObjectType.Geometry: _spatialTypeString = "geometry"; + _reorientObject = string.Empty; break; + //case SqlServerSpatialObjectType.Geography: default: _spatialTypeString = "geography"; + _reorientObject = ".ReorientObject()"; break; } @@ -196,8 +283,44 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum : SqlServer2008ExtentsMode.QueryIndividualFeatures); SRID = srid; + + if (!string.IsNullOrEmpty(TableSchema)) + QualifiedTable = $"[{TableSchema}].[{Table}]"; + else + QualifiedTable = $"[{Table}]"; + + // queries database + _attributeColumnNames = GetAttributeColumnNames(); } + /// + /// Gets or sets the method used in the method. + /// + public SqlServer2008ExtentsMode ExtentsMode + { + get => _extentsMode; + set + { + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && value == SqlServer2008ExtentsMode.SpatialIndex) + throw new ArgumentOutOfRangeException("ExtentsMode", "Geography type does not support extents by Spatial Index"); + + _extentsMode = value; + } + } + + + /// + /// Connectionstring + /// + public string ConnectionString + { + get { return ConnectionID; } + set { ConnectionID = value; } + } + + private string GetMakeValidString() + { return ValidateGeometries ? ".MakeValid()" : String.Empty; } + /// /// Method to parse TableSchema and Table from a (fully qualified) tablename /// @@ -250,82 +373,26 @@ protected void ParseTablename(string tablename) Table = sb.ToString(); } - /// - /// Gets or sets the method used in the method. - /// - public SqlServer2008ExtentsMode ExtentsMode { get; set; } - - /// - /// Connectionstring - /// - public string ConnectionString + private string GetAttributeColumnNames() { - get { return ConnectionID; } - set { ConnectionID = value; } - } - - /// - /// Data table name - /// - public string Table { get; private set; } + // returns csv list of OID + attribute columns (each column in square brackets) + var strSql = "SELECT STUFF (" + + $"(SELECT DISTINCT '], [' + name FROM sys.columns WHERE object_id = OBJECT_ID('{QualifiedTable}') " + + $"AND name NOT IN ('{GeometryColumn}') " + + "FOR XML PATH('')), 1, 2, '') + ']';"; - /// - /// Data table schema - /// - public string TableSchema { get; private set; } + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetAttributeColumnNames {0}", strSql); - /// - /// Gets a value indicating the qualified schema table name in square brackets - /// - protected string QualifiedTable - { - get + using (var conn = new System.Data.SqlClient.SqlConnection(ConnectionString)) { - var sb = new StringBuilder(); - if (!string.IsNullOrEmpty(TableSchema)) - sb.AppendFormat("[{0}].", TableSchema); - sb.AppendFormat("[{0}]", Table); - return sb.ToString(); + conn.Open(); + using (var cmd = new SqlCommand(strSql, conn)) + { + return (string)cmd.ExecuteScalar(); + } } } - /// - /// Name of geometry column - /// - public string GeometryColumn { get; private set; } - - /// - /// Name of column that contains the Object ID - /// - public string ObjectIdColumn { get; private set; } - - /// - /// Gets/Sets whether all passed to SqlServer2008 should be made valid using this function. - /// - public Boolean ValidateGeometries { get; set; } - - private String MakeValidString - { - get { return ValidateGeometries ? ".MakeValid()" : String.Empty; } - } - - private readonly string _spatialTypeString; - - /// - /// Spatial object type for - /// - public SqlServerSpatialObjectType SpatialObjectType { get; private set; } - - /// - /// If set, sends an Option MaxDop to the SQL-Server to override the Parallel Execution of indexes - /// This can be used if Spatial indexes are not used on SQL-Servers with many processors. - /// - /// MaxDop = 0 // Default behaviour - /// MaxDop = 1 // Suppress Parallel execution of Queryplan - /// MaxDop = [2..n] // Use X cores in in execution plan - /// - public int MaxDop { get; set; } - /// /// Function to transform to sql for the query /// @@ -342,6 +409,31 @@ protected string GetExtraOptions() } } + /// + /// Builds the WITH clause containing all specified table hints + /// + /// The WITH clause + protected string BuildTableHints() + { + if (ForceSeekHint || NoLockHint || !string.IsNullOrEmpty(ForceIndex)) + { + var hints = new List(3); + if (!string.IsNullOrEmpty(ForceIndex)) + { + hints.Add("INDEX(" + ForceIndex + ")"); + } + if (NoLockHint) + { + hints.Add("NOLOCK"); + } + if (ForceSeekHint) + { + hints.Add("FORCESEEK"); + } + return "WITH (" + string.Join(",", hints.ToArray()) + ")"; + } + return string.Empty; + } /// /// Returns geometries within the specified bounding box @@ -353,22 +445,16 @@ public override Collection GetGeometriesInView(Envelope bbox) var features = new Collection(); using (var conn = new SqlConnection(ConnectionString)) { - //Get bounding box string - string strBbox = GetBoxFilterStr(bbox); - - string strSql = "SELECT g." + GeometryColumn + ".STAsBinary() "; - strSql += " FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; + var sb = new StringBuilder($"SELECT {GeometryColumn}.STAsBinary() FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + sb.Append($"{DefinitionQuery} AND "); - strSql += strBbox; + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometriesInView {0}", sb.ToString()); - using (var command = new SqlCommand(strSql, conn)) + using (var command = new SqlCommand(sb.ToString(), conn)) { conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) @@ -383,7 +469,6 @@ public override Collection GetGeometriesInView(Envelope bbox) } } } - conn.Close(); } } return features; @@ -399,11 +484,14 @@ public override IGeometry GetGeometryByID(uint oid) IGeometry geom = null; using (var conn = new SqlConnection(ConnectionString)) { - string strSql = "SELECT g." + GeometryColumn + ".STAsBinary() FROM " + QualifiedTable + " g WHERE " + - ObjectIdColumn + "='" + oid + "'"; - conn.Open(); + string strSql = $"SELECT {GeometryColumn}.STAsBinary() FROM {QualifiedTable} " + + $"WHERE {ObjectIdColumn}={oid}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); + using (var command = new SqlCommand(strSql, conn)) { + conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) { while (dr.Read()) @@ -413,11 +501,10 @@ public override IGeometry GetGeometryByID(uint oid) } } } - conn.Close(); } return geom; } - + /// /// Returns geometry Object IDs whose bounding box intersects 'bbox' /// @@ -428,23 +515,16 @@ public override Collection GetObjectIDsInView(Envelope bbox) var objectlist = new Collection(); using (var conn = new SqlConnection(ConnectionString)) { - //Get bounding box string - var strBbox = GetBoxFilterStr(bbox); - - string strSql = "SELECT g." + ObjectIdColumn + " "; - strSql += "FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; + var sb = new StringBuilder($"SELECT {ObjectIdColumn} FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + sb.Append(DefinitionQuery + " AND "); - strSql += strBbox; + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetObjectIDsInView {0}", sb.ToString()); - - using (var command = new SqlCommand(strSql, conn)) + using (var command = new SqlCommand(sb.ToString(), conn)) { conn.Open(); using (var dr = command.ExecuteReader()) @@ -458,7 +538,6 @@ public override Collection GetObjectIDsInView(Envelope bbox) } } } - conn.Close(); } } return objectlist; @@ -471,28 +550,16 @@ public override Collection GetObjectIDsInView(Envelope bbox) /// protected string GetBoxFilterStr(Envelope bbox) { - string bboxText; if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - // SqlServer geography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) - // For reference: MakeValid() is another way to ensure Geography polygon is correctly oriented - // Note: default numeric rounding of Min/Max X/Y - bboxText = $"POLYGON (({bbox.MinX} {bbox.MinY}, {bbox.MaxX} {bbox.MinY}, {bbox.MaxX} {bbox.MaxY}, {bbox.MinX} {bbox.MaxY}, {bbox.MinX} {bbox.MinY}))"; - } - else - { - // GeometryToWKT returns clockwise ring - bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); // ""; - } + bbox = bbox.Intersection(GeogMaxExtents); - // STGeomFromText applicable to both Geometry AND Geography (ie x,y) - // STGeomFromText values are converted from nvarchar to binary(8) - it is possible that truncation or rounding may occur + var bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); - //string whereClause = GeometryColumn + ".STIntersects(geometry::STGeomFromText('" + bboxText + "', " + SRID + ")" + MakeValidString + ") = 1"; - string whereClause = String.Format("{0}{1}.STIntersects({4}::STGeomFromText('{2}', {3})) = 1", - GeometryColumn, MakeValidString, bboxText, SRID, _spatialTypeString); - - return whereClause; + // STGeomFromText applicable to both Geometry AND Geography (ie x,y ordinate order) + if (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex) || NoLockHint) + return $"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; + else + return $"{GeometryColumn}{GetMakeValidString()}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; } /// @@ -504,25 +571,27 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe { using (var conn = new SqlConnection(ConnectionString)) { - string strGeom = _spatialTypeString + "::STGeomFromText('" + geom.AsText() + "', #SRID#)"; - - strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(CultureInfo.InvariantCulture) : "0"); - strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1"; + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) + { + // Define Ring with Clockwise orientation, to be reoriented in query + var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { + GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), + GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), + GeogMaxExtents.BottomLeft()}); + geom = geom.Intersection(maxExentsPoly); + } - string strSql = "SELECT g.* , g." + GeometryColumn + ".STAsBinary() As sharpmap_tempgeometry FROM " + - QualifiedTable + " g " + BuildTableHints() + " WHERE "; + var sb = new StringBuilder($"SELECT {_attributeColumnNames}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + sb.Append($"{DefinitionQuery} AND "); - strSql += strGeom; + sb.Append($"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); - - using (var adapter = new SqlDataAdapter(strSql, conn)) + using (var adapter = new SqlDataAdapter(sb.ToString(), conn)) { conn.Open(); adapter.Fill(ds); @@ -531,15 +600,15 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe { var fdt = new FeatureDataTable(ds.Tables[0]); foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); foreach (System.Data.DataRow dr in ds.Tables[0].Rows) { FeatureDataRow fdr = fdt.NewRow(); foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; - fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); + fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], Factory); fdt.AddRow(fdr); } ds.Tables.Add(fdt); @@ -548,26 +617,6 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe } } - /* - /// - /// Convert WellKnownText to linestrings - /// - /// - /// - private LineString WktToLineString(string wkt) - { - LineString line = new LineString(); - wkt = wkt.Substring(wkt.LastIndexOf('(') + 1).Split(')')[0]; - string[] strPoints = wkt.Split(','); - foreach (string strPoint in strPoints) - { - string[] coord = strPoint.Split(' '); - line.Vertices.Add(new Point(double.Parse(coord[0], Map.NumberFormatEnUs), double.Parse(coord[1], Map.NumberFormatEnUs))); - } - return line; - } - */ - /// /// Returns the number of features in the dataset /// @@ -577,14 +626,15 @@ public override int GetFeatureCount() int count; using (var conn = new SqlConnection(ConnectionString)) { - var strSql = "SELECT COUNT(*) FROM " + QualifiedTable; + var strSql = $"SELECT COUNT({ObjectIdColumn}) FROM {QualifiedTable}"; + if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += " WHERE " + DefinitionQuery; + strSql += $" WHERE {DefinitionQuery}"; + using (var command = new SqlCommand(strSql, conn)) { conn.Open(); count = (int)command.ExecuteScalar(); - conn.Close(); } } return count; @@ -614,8 +664,11 @@ public override FeatureDataRow GetFeature(uint rowId) { using (var conn = new SqlConnection(ConnectionString)) { - string strSql = "select g.* , g." + GeometryColumn + ".STAsBinary() As sharpmap_tempgeometry from " + - QualifiedTable + " g WHERE " + ObjectIdColumn + "=" + rowId + ""; + var strSql = $"SELECT {_attributeColumnNames}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + + $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); + using (var adapter = new SqlDataAdapter(strSql, conn)) { var ds = new System.Data.DataSet(); @@ -626,17 +679,17 @@ public override FeatureDataRow GetFeature(uint rowId) { var fdt = new FeatureDataTable(ds.Tables[0]); foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); if (ds.Tables[0].Rows.Count > 0) { System.Data.DataRow dr = ds.Tables[0].Rows[0]; FeatureDataRow fdr = fdt.NewRow(); foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; - fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory); + fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], Factory); return fdr; } @@ -653,8 +706,6 @@ public override FeatureDataRow GetFeature(uint rowId) /// boundingbox public override Envelope GetExtents() { - // STAsText applicable to both Geometry AND Geography (ie x,y) - using (var conn = new SqlConnection(ConnectionString)) { conn.Open(); @@ -662,9 +713,12 @@ public override Envelope GetExtents() switch (ExtentsMode) { case SqlServer2008ExtentsMode.SpatialIndex: - sql = - "select bounding_box_xmin,bounding_box_xmax,bounding_box_ymin,bounding_box_ymax from sys.spatial_index_tessellations where object_id = (select object_id from sys.tables where name = '" + - Table + "' and type_desc = 'USER_TABLE')"; + // Applicable to GEOMETRY only. Reads extents of Spatial Index GRID (not feature table) and DefinitionQuery is NOT applied. + sql = "SELECT bounding_box_xmin, bounding_box_xmax, bounding_box_ymin, bounding_box_ymax " + + "FROM sys.spatial_index_tessellations " + + $"WHERE object_id = OBJECT_ID('{QualifiedTable}')"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); using (var command = new SqlCommand(sql, conn)) { @@ -685,18 +739,17 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.QueryIndividualFeatures: - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - // The geography datatype does not have the STEnvelope method. If using SQL2012, EnvelopeAggregate provides an alternative - throw new NotSupportedException("STEnvelope does not work with geography!"); - } - - //string strSQL = "SELECT g." + GeometryColumn + ".STEnvelope().STAsText() FROM " + Table + " g "; - sql = String.Format("SELECT g.{0}{1}.STEnvelope().STAsText() FROM {2} g ", - GeometryColumn, MakeValidString, QualifiedTable); + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + // GEOMETRY returns 1 row for each feature + sql = $"SELECT {GeometryColumn}{GetMakeValidString()}.STEnvelope().STAsBinary() FROM {QualifiedTable}"; + else + // GEOGRAPHY returns single row with multi-geometry containing all features + sql = $"SELECT {_spatialTypeString}::CollectionAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) - sql += " WHERE " + DefinitionQuery; + sql += $" WHERE {DefinitionQuery}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); using (var command = new SqlCommand(sql, conn)) { @@ -705,8 +758,7 @@ public override Envelope GetExtents() { while (dr.Read()) { - var wkt = dr.GetString(0); //[GeometryColumn]; - var g = Converters.WellKnownText.GeometryFromWKT.Parse(wkt); + var g = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); bx.ExpandToInclude(g.EnvelopeInternal); } } @@ -715,13 +767,18 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.EnvelopeAggregate: - // SqlGeometry returns a rectilinear polygon - // SqlGeography returns a CURVED polygon - sql = String.Format("SELECT {3}::EnvelopeAggregate(g.{0}{1}).STAsText() FROM {2} g ", - GeometryColumn, MakeValidString, QualifiedTable, _spatialTypeString); + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + // GEOMETRY EnvelopeAggregate returns RECTILINEAR polygon + sql = $"SELECT {_spatialTypeString}::EnvelopeAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; + else + // GEOGRAPHY EnvelopeAggregate returns CURVED polygon (not supported by SharpMap), + // so use ConvextHullAggregate to return POLYGON + sql = $"SELECT {_spatialTypeString}::ConvexHullAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) - sql += " WHERE " + DefinitionQuery; + sql += $" WHERE {DefinitionQuery}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); using (var command = new SqlCommand(sql, conn)) { @@ -729,8 +786,7 @@ public override Envelope GetExtents() { if (dr.Read()) { - var wkt = dr.GetString(0); - var g = Converters.WellKnownText.GeometryFromWKT.Parse(wkt); + var g = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); return g.EnvelopeInternal; } } @@ -752,28 +808,19 @@ public override Envelope GetExtents() /// FeatureDataSet to fill data into public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) { - //List features = new List(); using (var conn = new SqlConnection(ConnectionString)) { - //Get bounding box string - string strBbox = GetBoxFilterStr(bbox); - - //string strSQL = "SELECT g.*, g." + GeometryColumn + ".STAsBinary() AS sharpmap_tempgeometry "; - string strSql = String.Format( - "SELECT g.*, g.{0}{1}.STAsBinary() AS sharpmap_tempgeometry FROM {2} g {3} WHERE ", - GeometryColumn, MakeValidString, QualifiedTable, BuildTableHints()); + var sb = new StringBuilder($"SELECT {_attributeColumnNames}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() AS {SharpMapWkb} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + sb.Append($"{DefinitionQuery} AND "); - strSql += strBbox; + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); - - using (var adapter = new SqlDataAdapter(strSql, conn)) + using (var adapter = new SqlDataAdapter(sb.ToString(), conn)) { conn.Open(); var ds2 = new System.Data.DataSet(); @@ -783,17 +830,19 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) { var fdt = new FeatureDataTable(ds2.Tables[0]); foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + foreach (System.Data.DataRow dr in ds2.Tables[0].Rows) { FeatureDataRow fdr = fdt.NewRow(); foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry") + if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; fdr.Geometry = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], + Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], Factory); + fdt.AddRow(fdr); } ds.Tables.Add(fdt); @@ -804,45 +853,5 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) #endregion - /// - /// When true, uses the FORCESEEK table hint. - /// - public bool ForceSeekHint { get; set; } - - /// - /// When true, uses the NOLOCK table hint. - /// - public bool NoLockHint { get; set; } - - /// - /// When set, forces use of the specified index - /// - public string ForceIndex { get; set; } - - /// - /// Builds the WITH clause containing all specified table hints - /// - /// The WITH clause - protected string BuildTableHints() - { - if (ForceSeekHint || NoLockHint || !string.IsNullOrEmpty(ForceIndex)) - { - var hints = new List(3); - if (!string.IsNullOrEmpty(ForceIndex)) - { - hints.Add("INDEX(" + ForceIndex + ")"); - } - if (NoLockHint) - { - hints.Add("NOLOCK"); - } - if (ForceSeekHint) - { - hints.Add("FORCESEEK"); - } - return "WITH (" + string.Join(",", hints.ToArray()) + ")"; - } - return string.Empty; - } } } From 363d9fa78142db84bb02e73618a08b9fb1ace548 Mon Sep 17 00:00:00 2001 From: Tim C Date: Thu, 15 Nov 2018 14:47:11 +0700 Subject: [PATCH 073/186] Mark clunky ctors as obsolete; modify getting attribute column list --- SharpMap/Data/Providers/SqlServer2008.cs | 80 ++++++++++++++++-------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 8c00f0bc..418a1ee2 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -101,12 +101,6 @@ public class SqlServer2008 : BaseProvider // required for restricting extents of WKT (eg bbox) used to query SqlGeography private static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 179.999999999, -89.999999999, 89.999999999); - // List of columns EXCLUDING the spatial column eg: [Id], [Name], [Geom4326] >> [Id], [Name] - // _attributeColumnNames is used when feature "attributes" should be returned (eg OnExecuteIntersectionQuery, GetFeature). - // The Spatial column should NOT be retrieved directly without reference to Microsoft.SqlServerTypes, - // as it will cause DataAdaptor.Fill() to throw an error when attempting to determine type for spatial column. - private readonly string _attributeColumnNames; - // SqlGeography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) // SqlGeometry : orientation is irrelevant // GeometryToWKT returns Envelope with clockwise ring, so need to call .ReorientObject() for WKT used to query SqlGeography @@ -117,6 +111,12 @@ public class SqlServer2008 : BaseProvider private SqlServer2008ExtentsMode _extentsMode; + // List of columns EXCLUDING the spatial column eg: [Id], [Name], [Geom4326] >> [Id], [Name] + // _attributeColumnNames is used when feature "attributes" should be returned (eg OnExecuteIntersectionQuery, GetFeature). + // The Spatial column should NOT be retrieved directly without reference to Microsoft.SqlServerTypes, + // as it will cause DataAdaptor.Fill() to throw an error when attempting to determine type for spatial column. + private string _attributeColumnNames; + /// /// Data table schema /// @@ -183,6 +183,7 @@ public class SqlServer2008 : BaseProvider /// Connectionstring /// Name of data table /// Name of column with unique identifier + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string oidColumnName) : this(connectionStr, tablename, "shape", oidColumnName, SqlServerSpatialObjectType.Geometry) { @@ -195,6 +196,7 @@ public SqlServer2008(string connectionStr, string tablename, string oidColumnNam /// Name of data table /// Name of column with unique identifier /// The type of the spatial object to use for spatial queries + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string oidColumnName, SqlServerSpatialObjectType spatialObjectType) : this(connectionStr, tablename, "shape", oidColumnName, spatialObjectType) @@ -208,6 +210,7 @@ public SqlServer2008(string connectionStr, string tablename, string oidColumnNam /// Name of data table /// Name of geometry column /// Name of column with unique identifier + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string geometryColumnName, string oidColumnName) : this(connectionStr, tablename, geometryColumnName, oidColumnName, SqlServerSpatialObjectType.Geometry) { @@ -221,6 +224,7 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu /// Name of spatial column /// Name of column with unique identifier /// spatial type (Geometry or Geography) + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType) : this(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, false) @@ -236,6 +240,7 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum /// Name of column with unique identifier /// spatial type (Geometry or Geography) /// If true, the bounds of the spatial index is used for the GetExtents() method which significantly improves performance instead of reading through all features in the table + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType, bool useSpatialIndexExtentAsExtent) : this( @@ -254,8 +259,29 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum /// spatial type (Geometry or Geography) /// If true, the bounds of the spatial index is used for the GetExtents() method which heavily increases performance instead of reading through all features in the table /// The spatial reference id + [Obsolete] public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType, bool useSpatialIndexExtentAsExtent, int srid) + : this( + connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, srid, + (useSpatialIndexExtentAsExtent ? + SqlServer2008ExtentsMode.SpatialIndex : + SqlServer2008ExtentsMode.QueryIndividualFeatures)) + { + } + + /// + /// Initializes a new connection to SQL Server + /// + /// Connectionstring + /// Name of data table + /// Name of spatial column + /// Name of column with unique identifier + /// spatial type (Geometry or Geography) + /// The spatial reference id + /// Mode for calculating full extents of the data + public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType, int srid, SqlServer2008ExtentsMode extentsMode) { ConnectionString = connectionStr; @@ -278,19 +304,15 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum break; } - ExtentsMode = (useSpatialIndexExtentAsExtent - ? SqlServer2008ExtentsMode.SpatialIndex - : SqlServer2008ExtentsMode.QueryIndividualFeatures); - SRID = srid; + ExtentsMode = extentsMode; + if (!string.IsNullOrEmpty(TableSchema)) QualifiedTable = $"[{TableSchema}].[{Table}]"; else QualifiedTable = $"[{Table}]"; - // queries database - _attributeColumnNames = GetAttributeColumnNames(); } /// @@ -308,7 +330,6 @@ public SqlServer2008ExtentsMode ExtentsMode } } - /// /// Connectionstring /// @@ -375,22 +396,27 @@ protected void ParseTablename(string tablename) private string GetAttributeColumnNames() { - // returns csv list of OID + attribute columns (each column in square brackets) - var strSql = "SELECT STUFF (" + - $"(SELECT DISTINCT '], [' + name FROM sys.columns WHERE object_id = OBJECT_ID('{QualifiedTable}') " + - $"AND name NOT IN ('{GeometryColumn}') " + - "FOR XML PATH('')), 1, 2, '') + ']';"; + if (string.IsNullOrEmpty(_attributeColumnNames)) + { + // select csv list of OID + attribute columns (each column in square brackets) + var strSql = "SELECT STUFF (" + + $"(SELECT DISTINCT '], [' + name FROM sys.columns WHERE object_id = OBJECT_ID('{QualifiedTable}') " + + $"AND name NOT IN ('{GeometryColumn}') " + + "FOR XML PATH('')), 1, 2, '') + ']';"; - if (_logger.IsDebugEnabled) _logger.DebugFormat("GetAttributeColumnNames {0}", strSql); + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetAttributeColumnNames {0}", strSql); - using (var conn = new System.Data.SqlClient.SqlConnection(ConnectionString)) - { - conn.Open(); - using (var cmd = new SqlCommand(strSql, conn)) + using (var conn = new System.Data.SqlClient.SqlConnection(ConnectionString)) { - return (string)cmd.ExecuteScalar(); + conn.Open(); + using (var cmd = new SqlCommand(strSql, conn)) + { + _attributeColumnNames = (string)cmd.ExecuteScalar(); + } } } + + return _attributeColumnNames; } /// @@ -581,7 +607,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe geom = geom.Intersection(maxExentsPoly); } - var sb = new StringBuilder($"SELECT {_attributeColumnNames}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) @@ -664,7 +690,7 @@ public override FeatureDataRow GetFeature(uint rowId) { using (var conn = new SqlConnection(ConnectionString)) { - var strSql = $"SELECT {_attributeColumnNames}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + + var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); @@ -810,7 +836,7 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) { using (var conn = new SqlConnection(ConnectionString)) { - var sb = new StringBuilder($"SELECT {_attributeColumnNames}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() AS {SharpMapWkb} " + + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() AS {SharpMapWkb} " + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) From c6dcd8eb5f99928d5a1eaf079200f9dcf3a40ae8 Mon Sep 17 00:00:00 2001 From: Tim C Date: Thu, 15 Nov 2018 14:51:04 +0700 Subject: [PATCH 074/186] Update UnitTests introducing cases for both Geometry and Geography --- UnitTests/Converters/SqlServer2008.cs | 12 +- .../Data/Providers/SQLServer2008Tests.cs | 235 ++++++++++++------ UnitTests/Serialization/ProviderTest.cs | 14 +- UnitTests/UnitTests.csproj | 21 +- UnitTests/app.config | 88 +++---- UnitTests/packages.config | 3 + 6 files changed, 250 insertions(+), 123 deletions(-) diff --git a/UnitTests/Converters/SqlServer2008.cs b/UnitTests/Converters/SqlServer2008.cs index 9bbe2b71..f6ada0ed 100644 --- a/UnitTests/Converters/SqlServer2008.cs +++ b/UnitTests/Converters/SqlServer2008.cs @@ -10,7 +10,7 @@ namespace UnitTests.Converters { [TestFixture] - [Ignore("Requires SqlServerSpatial")] + //[Ignore("Requires SqlServerSpatial")] public class SqlServer2008 { private const string Point = "POINT (20.564 46.3493254)"; @@ -23,8 +23,18 @@ public class SqlServer2008 private const string Polygon = "POLYGON ((20 20, 20 30, 30 30, 30 20, 20 20), (21 21, 21 29, 29 29, 29 21, 21 21))"; private const string MultiPolygon = "MULTIPOLYGON (((20 20, 20 30, 30 30, 30 20, 20 20)), ((41 41, 41 49, 49 49, 49 41, 41 41)))"; + [TestFixtureSetUp] + public void SetupFixture() + { + GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + + SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + } + + private Geometry ToSqlServerAndBack(Geometry gIn) { + Assert.That(gIn, Is.Not.Null); Assert.That(gIn.SRID, Is.EqualTo(-1)); gIn.SRID = 0; diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index a8aed478..35184fe7 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -6,6 +6,7 @@ using System.Data.SqlClient; using System.Collections.ObjectModel; using System.IO; +using SharpMap.Data.Providers; namespace UnitTests.Data.Providers { @@ -16,6 +17,7 @@ public class SQLServer2008Tests public void SetupFixture() { GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); } [NUnit.Framework.TestCase("[sde].[gisadmin.di]", "sde", "gisadmin.di")] @@ -55,20 +57,27 @@ public void SetupFixture() { Assert.Ignore("Requires SQL Server connectionstring"); } - GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); - // Set up sample table + // Set up sample tables (Geometry + Geography) using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) { conn.Open(); - using(SqlCommand cmd = conn.CreateCommand()) + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = "CREATE TABLE roads_ugl_geom(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; + cmd.ExecuteNonQuery(); + } + + using (SqlCommand cmd = conn.CreateCommand()) { - cmd.CommandText = "CREATE TABLE roads_ugl(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; + cmd.CommandText = "CREATE TABLE roads_ugl_geog(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOG geography)"; cmd.ExecuteNonQuery(); } - + + // Load data using (SharpMap.Data.Providers.ShapeFile shapeFile = new SharpMap.Data.Providers.ShapeFile(GetTestFile())) { @@ -78,26 +87,62 @@ public void SetupFixture() indexes = indexes.Take(100); + var cmdGeom = new SqlCommand("INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))", conn); + var cmdGeog = new SqlCommand("INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES (@Name, geography::STGeomFromText(@Geog, @Srid))", conn); + foreach (uint idx in indexes) { SharpMap.Data.FeatureDataRow feature = shapeFile.GetFeature(idx); - using (SqlCommand cmd = conn.CreateCommand()) + //using (SqlCommand cmd = conn.CreateCommand()) + //{ + // cmd.CommandText = "INSERT INTO roads_ugl(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))"; + + // cmd.Parameters.AddWithValue("@Geom", feature.Geometry.AsText()); + // cmd.Parameters.AddWithValue("@Name", feature["NAME"]); + // cmd.Parameters.AddWithValue("@Srid", shapeFile.SRID); + // cmd.ExecuteNonQuery(); + //} + if (cmdGeom.Parameters.Count == 0) + { + cmdGeom.Parameters.AddWithValue("@Geom", feature.Geometry.AsText()); + cmdGeom.Parameters.AddWithValue("@Name", feature["NAME"]); + cmdGeom.Parameters.AddWithValue("@Srid", shapeFile.SRID); + } + else { - cmd.CommandText = "INSERT INTO roads_ugl(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))"; + cmdGeom.Parameters[0].Value = feature.Geometry.AsText(); + cmdGeom.Parameters[1].Value = feature["NAME"]; + cmdGeom.Parameters[2].Value= shapeFile.SRID; + } + cmdGeom.ExecuteNonQuery(); - cmd.Parameters.AddWithValue("@Geom", feature.Geometry.AsText()); - cmd.Parameters.AddWithValue("@Name", feature["NAME"]); - cmd.Parameters.AddWithValue("@Srid", shapeFile.SRID); - cmd.ExecuteNonQuery(); + if (cmdGeog.Parameters.Count == 0) + { + cmdGeog.Parameters.AddWithValue("@Geog", feature.Geometry.AsText()); + cmdGeog.Parameters.AddWithValue("@Name", feature["NAME"]); + cmdGeog.Parameters.AddWithValue("@Srid", 4326); + } + else + { + cmdGeog.Parameters[0].Value = feature.Geometry.AsText(); + cmdGeog.Parameters[1].Value = feature["NAME"]; + //cmdGeog.Parameters[2].Value = 4326; } + cmdGeog.ExecuteNonQuery(); } + + cmdGeom.Dispose(); + cmdGeog.Dispose(); } - // Create spatial index - using(SqlCommand cmd = conn.CreateCommand()) + // Create spatial indexes + using (SqlCommand cmd = conn.CreateCommand()) { - cmd.CommandText = "CREATE SPATIAL INDEX [IX_roads_ugl_GEOM] ON [dbo].[roads_ugl](GEOM)USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; + cmd.CommandText = "CREATE SPATIAL INDEX [IX_roads_ugl_GEOM] ON [dbo].[roads_ugl_geom](GEOM) USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "CREATE SPATIAL INDEX [IX_roads_ugl_GEOG] ON [dbo].[roads_ugl_geog](GEOG)"; cmd.ExecuteNonQuery(); } } @@ -118,20 +163,36 @@ public void TearDownTestFixture() conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { - cmd.CommandText = "DROP TABLE roads_ugl"; + cmd.CommandText = "DROP TABLE roads_ugl_geom"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE roads_ugl_geog"; cmd.ExecuteNonQuery(); } } } - private SharpMap.Data.Providers.SqlServer2008 GetTestProvider() + //private SharpMap.Data.Providers.SqlServer2008 GetTestProvider() + //{ + // return GetTestProvider(SqlServerSpatialObjectType.Geometry); + //} + + private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialObjectType spatialType) { - return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, "roads_ugl", "GEOM", "ID"); + switch (spatialType) + { + case SqlServerSpatialObjectType.Geography: + // NB note forcing WGS84 + return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); + default: + return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType); + } } private SharpMap.Data.Providers.SqlServer2008Ex GetTestProviderEx() { - return new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, "roads_ugl", "GEOM", "ID"); + return new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, "roads_ugl_geom", "GEOM", "ID"); } /// @@ -142,10 +203,11 @@ private GeoAPI.Geometries.Envelope GetTestEnvelope() return SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse("POLYGON ((-97.23724071609665 41.698023105763589, -82.424263624596563 41.698023105763589, -82.424263624596563 49.000629000758515, -97.23724071609665 49.000629000758515, -97.23724071609665 41.698023105763589))").EnvelopeInternal; } - [NUnit.Framework.Test()] - public void TestGetExtentsQueryIndividualFeatures() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsQueryIndividualFeatures(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures; GeoAPI.Geometries.Envelope extents = sq.GetExtents(); @@ -153,19 +215,31 @@ public void TestGetExtentsQueryIndividualFeatures() Assert.IsNotNull(extents); } - [NUnit.Framework.Test()] - public void TestGetExtentsSpatialIndex() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsSpatialIndex(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; - GeoAPI.Geometries.Envelope extents = sq.GetExtents(); + if (spatialType == SqlServerSpatialObjectType.Geography) + { + var ex = Assert.Throws(() => + { + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; + }); + } + else + { + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; + GeoAPI.Geometries.Envelope extents = sq.GetExtents(); - Assert.IsNotNull(extents); + Assert.IsNotNull(extents); + } } - [NUnit.Framework.Test()] - public void TestGetExtentsEnvelopeAggregate() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialType) { using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) { @@ -181,7 +255,7 @@ public void TestGetExtentsEnvelopeAggregate() } } - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.EnvelopeAggregate; GeoAPI.Geometries.Envelope extents = sq.GetExtents(); @@ -189,10 +263,11 @@ public void TestGetExtentsEnvelopeAggregate() Assert.IsNotNull(extents); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInView() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); var geometries = sq.GetGeometriesInView(GetTestEnvelope()); @@ -200,10 +275,11 @@ public void TestGetGeometriesInView() Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInViewDefinitionQuery() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInViewDefinitionQuery(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.DefinitionQuery = "NAME LIKE 'A%'"; @@ -213,10 +289,11 @@ public void TestGetGeometriesInViewDefinitionQuery() Assert.LessOrEqual(geometries.Count, 100); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInViewNOLOCK() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; var geometries = sq.GetGeometriesInView(GetTestEnvelope()); @@ -225,10 +302,11 @@ public void TestGetGeometriesInViewNOLOCK() Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInViewFORCESEEK() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.ForceSeekHint = true; var geometries = sq.GetGeometriesInView(GetTestEnvelope()); @@ -237,26 +315,28 @@ public void TestGetGeometriesInViewFORCESEEK() Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInViewFORCEINDEX() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] + public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatialType, string indexName) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - sq.ForceIndex = "IX_roads_ugl_GEOM"; + sq.ForceIndex = indexName; var geometries = sq.GetGeometriesInView(GetTestEnvelope()); Assert.IsNotNull(geometries); Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.Test()] - public void TestGetGeometriesInViewAllHints() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] + public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialType, string indexName) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; - sq.ForceIndex = "IX_roads_ugl_GEOM"; + sq.ForceIndex = indexName; var geometries = sq.GetGeometriesInView(GetTestEnvelope()); Assert.IsNotNull(geometries); @@ -264,6 +344,8 @@ public void TestGetGeometriesInViewAllHints() } [NUnit.Framework.Test()] + //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] public void TestGetGeometriesInViewEx() { // Note: @@ -289,7 +371,7 @@ public void TestPerformanceSqlServer2008ExProvider() // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). // This can be solved with a in the .config file. - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerSpatialObjectType.Geometry); SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProviderEx(); GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(); List measurements = new List(200); @@ -322,10 +404,11 @@ public void TestPerformanceSqlServer2008ExProvider() Assert.Less(avgex, avg); } - [NUnit.Framework.Test()] - public void TestGetObjectIDsInView() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); var objectIds = sq.GetObjectIDsInView(GetTestEnvelope()); @@ -333,10 +416,11 @@ public void TestGetObjectIDsInView() Assert.AreEqual(100, objectIds.Count); } - [NUnit.Framework.Test()] - public void TestExecuteIntersectionQuery() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); @@ -345,14 +429,15 @@ public void TestExecuteIntersectionQuery() Assert.AreEqual(100, ds.Tables[0].Rows.Count); } - [NUnit.Framework.Test()] - public void TestExecuteIntersectionQueryAllHints() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] + public void TestExecuteIntersectionQueryAllHints(SqlServerSpatialObjectType spatialType, string indexName) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; - sq.ForceIndex = "IX_roads_ugl_GEOM"; + sq.ForceIndex = indexName; SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); @@ -361,20 +446,22 @@ public void TestExecuteIntersectionQueryAllHints() Assert.AreEqual(100, ds.Tables[0].Rows.Count); } - [NUnit.Framework.Test()] - public void TestGetFeatureCount() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); int count = sq.GetFeatureCount(); Assert.AreEqual(100, count); } - [NUnit.Framework.Test()] - public void TestGetFeatureCountWithDefinitionQuery() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.DefinitionQuery = "NAME LIKE 'A%'"; @@ -383,20 +470,22 @@ public void TestGetFeatureCountWithDefinitionQuery() Assert.LessOrEqual(count, 100); } - [NUnit.Framework.Test()] - public void TestGetFeature() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeature(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); var feature = sq.GetFeature(1); Assert.IsNotNull(feature); } - [NUnit.Framework.Test()] - public void TestGetFeatureNonExisting() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureNonExisting(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); var feature = sq.GetFeature(99999999); diff --git a/UnitTests/Serialization/ProviderTest.cs b/UnitTests/Serialization/ProviderTest.cs index 8802cc4f..3c831ab2 100644 --- a/UnitTests/Serialization/ProviderTest.cs +++ b/UnitTests/Serialization/ProviderTest.cs @@ -108,11 +108,15 @@ public void TestPostGIS() } #if !LINUX - [Test] - public void TestSqlServer2008() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestSqlServer2008(SqlServerSpatialObjectType spatialType) { var sql2008S = new SqlServer2008("Data Source=IVV-SQLD; Database=OBE;Integrated Security=SSPI;", - "roads", "wkb_geometry", "ogc_fid", SqlServerSpatialObjectType.Geometry); + "roads", "spatialCol", "idCol", + spatialType, + 4326, + SqlServer2008ExtentsMode.EnvelopeAggregate); var sql2008D = SandD(sql2008S, GetFormatter()); @@ -123,8 +127,10 @@ public void TestSqlServer2008() Assert.AreEqual(sql2008S.ObjectIdColumn, sql2008D.ObjectIdColumn); Assert.AreEqual(sql2008S.SpatialObjectType, sql2008D.SpatialObjectType); Assert.AreEqual(sql2008S.SRID, sql2008D.SRID); + Assert.AreEqual(sql2008S.ExtentsMode, sql2008D.ExtentsMode); } + #endif - + } } diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index c91808ea..0c23bc34 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -87,9 +87,8 @@ ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - False - C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll + + ..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll @@ -229,6 +228,7 @@ + @@ -358,6 +358,21 @@ + + + + Always + + + Always + + + Always + + + Always + + diff --git a/UnitTests/app.config b/UnitTests/app.config index bc62dafe..09ada9bc 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -1,16 +1,16 @@  - -
    - - + +
    + +
    - + @@ -21,48 +21,52 @@ - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/UnitTests/packages.config b/UnitTests/packages.config index f07147aa..c9186baf 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -7,6 +7,7 @@ + @@ -15,6 +16,8 @@ + + From f7fa2988991b8101f0e22460b11595e27a2d5002 Mon Sep 17 00:00:00 2001 From: Tim C Date: Thu, 15 Nov 2018 15:58:31 +0700 Subject: [PATCH 075/186] Remove test database conn string to fix Travis build --- UnitTests/app.config | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/UnitTests/app.config b/UnitTests/app.config index 09ada9bc..c460be04 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -9,8 +9,9 @@ - - + + From 61791abcbb1be8e56fb1186d69c3213896d4ba5d Mon Sep 17 00:00:00 2001 From: Tim C Date: Thu, 15 Nov 2018 17:10:44 +0700 Subject: [PATCH 076/186] add SqlServerTypes/Loader.cs which is not included by package install --- UnitTests/SqlServerTypes/Loader.cs | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 UnitTests/SqlServerTypes/Loader.cs diff --git a/UnitTests/SqlServerTypes/Loader.cs b/UnitTests/SqlServerTypes/Loader.cs new file mode 100644 index 00000000..929aba6f --- /dev/null +++ b/UnitTests/SqlServerTypes/Loader.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace SqlServerTypes +{ + /// + /// Utility methods related to CLR Types for SQL Server + /// + public class Utilities + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr LoadLibrary(string libname); + + /// + /// Loads the required native assemblies for the current architecture (x86 or x64) + /// + /// + /// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications + /// and AppDomain.CurrentDomain.BaseDirectory for desktop applications. + /// + public static void LoadNativeAssemblies(string rootApplicationPath) + { + var nativeBinaryPath = IntPtr.Size > 4 + ? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\") + : Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\"); + + LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll"); + LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll"); + } + + private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName) + { + var path = Path.Combine(nativeBinaryPath, assemblyName); + var ptr = LoadLibrary(path); + if (ptr == IntPtr.Zero) + { + throw new Exception(string.Format( + "Error loading {0} (ErrorCode: {1})", + assemblyName, + Marshal.GetLastWin32Error())); + } + } + } +} From f80d29ad388a3b69f2d1691c962f918ca14ce167 Mon Sep 17 00:00:00 2001 From: Tim C Date: Thu, 15 Nov 2018 21:14:22 +0700 Subject: [PATCH 077/186] Remove NuGet Microsoft.SqlServer.Types (install script not running on Travis and lacking .targets as an alternative) --- UnitTests/Converters/SqlServer2008.cs | 5 +-- .../Data/Providers/SQLServer2008Tests.cs | 4 +- UnitTests/SqlServerTypes/Loader.cs | 45 ------------------- UnitTests/UnitTests.csproj | 20 +-------- UnitTests/app.config | 3 +- UnitTests/packages.config | 1 - 6 files changed, 6 insertions(+), 72 deletions(-) delete mode 100644 UnitTests/SqlServerTypes/Loader.cs diff --git a/UnitTests/Converters/SqlServer2008.cs b/UnitTests/Converters/SqlServer2008.cs index f6ada0ed..15be71a9 100644 --- a/UnitTests/Converters/SqlServer2008.cs +++ b/UnitTests/Converters/SqlServer2008.cs @@ -10,7 +10,7 @@ namespace UnitTests.Converters { [TestFixture] - //[Ignore("Requires SqlServerSpatial")] + [Ignore("Requires SqlServerSpatial")] public class SqlServer2008 { private const string Point = "POINT (20.564 46.3493254)"; @@ -27,8 +27,7 @@ public class SqlServer2008 public void SetupFixture() { GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - - SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); } diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index 35184fe7..ee125e46 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -17,7 +17,6 @@ public class SQLServer2008Tests public void SetupFixture() { GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); } [NUnit.Framework.TestCase("[sde].[gisadmin.di]", "sde", "gisadmin.di")] @@ -38,6 +37,7 @@ public void VerifySchemaDetection(string schemaTable, string tableSchema, string } [NUnit.Framework.TestFixture] + [Ignore("Requires SqlServerSpatial")] public class SQLServer2008DbTests { private string GetTestFile() @@ -59,7 +59,7 @@ public void SetupFixture() } GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); // Set up sample tables (Geometry + Geography) using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) diff --git a/UnitTests/SqlServerTypes/Loader.cs b/UnitTests/SqlServerTypes/Loader.cs deleted file mode 100644 index 929aba6f..00000000 --- a/UnitTests/SqlServerTypes/Loader.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace SqlServerTypes -{ - /// - /// Utility methods related to CLR Types for SQL Server - /// - public class Utilities - { - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - private static extern IntPtr LoadLibrary(string libname); - - /// - /// Loads the required native assemblies for the current architecture (x86 or x64) - /// - /// - /// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications - /// and AppDomain.CurrentDomain.BaseDirectory for desktop applications. - /// - public static void LoadNativeAssemblies(string rootApplicationPath) - { - var nativeBinaryPath = IntPtr.Size > 4 - ? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\") - : Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\"); - - LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll"); - LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll"); - } - - private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName) - { - var path = Path.Combine(nativeBinaryPath, assemblyName); - var ptr = LoadLibrary(path); - if (ptr == IntPtr.Zero) - { - throw new Exception(string.Format( - "Error loading {0} (ErrorCode: {1})", - assemblyName, - Marshal.GetLastWin32Error())); - } - } - } -} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 0c23bc34..0f21f78a 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -87,9 +87,7 @@ ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - ..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll - + ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll True @@ -228,7 +226,6 @@ - @@ -358,21 +355,6 @@ - - - - Always - - - Always - - - Always - - - Always - - diff --git a/UnitTests/app.config b/UnitTests/app.config index c460be04..41756e38 100644 --- a/UnitTests/app.config +++ b/UnitTests/app.config @@ -9,8 +9,7 @@ - + diff --git a/UnitTests/packages.config b/UnitTests/packages.config index c9186baf..d48db458 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -7,7 +7,6 @@ - From 36eaa8d459438df0e47fc3b2bae85440c0b67df1 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 17 Nov 2018 10:53:39 +0700 Subject: [PATCH 078/186] Update Examples\WinformSamples for SqlServer providers; change to SqlConnString and drop LocalDb mdf and ldf files --- .../WinFormSamples/FormMapBox.Designer.cs | 52 +++-- .../GeoData/SqlServer/SqlServerSample.mdf | Bin 3080192 -> 0 bytes .../GeoData/SqlServer/SqlServerSample_log.ldf | Bin 4071424 -> 0 bytes .../Properties/Settings.Designer.cs | 7 +- .../Properties/Settings.settings | 6 +- .../Samples/FormSqlServerOpts.Designer.cs | 13 ++ .../Samples/FormSqlServerOpts.cs | 48 ++--- .../Samples/FormSqlServerOpts.resx | 9 +- .../WinFormSamples/Samples/SqlServerSample.cs | 130 ++++++++---- Examples/WinFormSamples/WinFormSamples.csproj | 28 ++- Examples/WinFormSamples/app.config | 187 +++++++++--------- Examples/WinFormSamples/packages.config | 1 + 12 files changed, 274 insertions(+), 207 deletions(-) delete mode 100644 Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf delete mode 100644 Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf diff --git a/Examples/WinFormSamples/FormMapBox.Designer.cs b/Examples/WinFormSamples/FormMapBox.Designer.cs index 3446ca02..c1dc710c 100644 --- a/Examples/WinFormSamples/FormMapBox.Designer.cs +++ b/Examples/WinFormSamples/FormMapBox.Designer.cs @@ -61,13 +61,13 @@ private void InitializeComponent() this.radioButton7 = new System.Windows.Forms.RadioButton(); this.radioButton8 = new System.Windows.Forms.RadioButton(); this.radioButton9 = new System.Windows.Forms.RadioButton(); + this.radioButton12 = new System.Windows.Forms.RadioButton(); this.radioButton10 = new System.Windows.Forms.RadioButton(); this.radioButton11 = new System.Windows.Forms.RadioButton(); this.btnCreateTiles = new System.Windows.Forms.Button(); this.lvwDecorations = new System.Windows.Forms.ListView(); this.pgMapDecoration = new System.Windows.Forms.PropertyGrid(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.radioButton12 = new System.Windows.Forms.RadioButton(); ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); this.scMain.Panel2.SuspendLayout(); this.scMain.SuspendLayout(); @@ -85,8 +85,8 @@ private void InitializeComponent() // // scMain // - this.scMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.scMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.scMain.Location = new System.Drawing.Point(174, 0); this.scMain.Name = "scMain"; @@ -110,8 +110,8 @@ private void InitializeComponent() // // scMapProp // - this.scMapProp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.scMapProp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.scMapProp.Location = new System.Drawing.Point(174, 3); this.scMapProp.Name = "scMapProp"; @@ -397,6 +397,17 @@ private void InitializeComponent() this.radioButton9.Click += new System.EventHandler(this.radioButton_Click); this.radioButton9.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); // + // radioButton12 + // + this.radioButton12.AutoSize = true; + this.radioButton12.Location = new System.Drawing.Point(13, 214); + this.radioButton12.Name = "radioButton12"; + this.radioButton12.Size = new System.Drawing.Size(71, 17); + this.radioButton12.TabIndex = 13; + this.radioButton12.Text = "SqlServer"; + this.radioButton12.UseVisualStyleBackColor = true; + this.radioButton12.Click += new System.EventHandler(this.radioButton_Click); + // // radioButton10 // this.radioButton10.AutoSize = true; @@ -419,17 +430,6 @@ private void InitializeComponent() this.radioButton11.UseVisualStyleBackColor = true; this.radioButton11.Click += new System.EventHandler(this.radioButton_Click); // - // radioButton12 - // - this.radioButton12.AutoSize = true; - this.radioButton12.Location = new System.Drawing.Point(13, 214); - this.radioButton12.Name = "radioButton12"; - this.radioButton12.Size = new System.Drawing.Size(120, 17); - this.radioButton12.TabIndex = 13; - this.radioButton12.Text = "SqlServer (LocalDb)"; - this.radioButton12.UseVisualStyleBackColor = true; - this.radioButton12.Click += new System.EventHandler(this.radioButton_Click); - // // btnCreateTiles // this.btnCreateTiles.Location = new System.Drawing.Point(13, 283); @@ -586,17 +586,27 @@ private void radioButton_Click(object sender, EventArgs e) case "SpatiaLite": mapBox1.Map = SpatiaLiteSample.InitializeMap(tbAngle.Value); break; - case "SqlServer (LocalDb)": + case "SqlServer": // create empty map with BruTile basemap mapBox1.Map = SqlServerSample.InitializeMap(tbAngle.Value); - // set path for LocalDb copy - var connStrBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder(Properties.Settings.Default.SqlServerLocalDbConnectionString); - connStrBuilder.AttachDBFilename = connStrBuilder.AttachDBFilename.Replace("..\\", AppDomain.CurrentDomain.BaseDirectory); + // check conn string + var connStrBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder(Properties.Settings.Default.SqlServerConnectionString); + if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) + { + mapBox1.Refresh(); + + MessageBox.Show("Requires SqlServer connection string to be defined (Project / Settings)\n\n" + + "Also, if project folder SqlServerTypes\\x64 and \\x86 are empty, then force reinstall of NuGet package:\n\n" + + "PM> Update-Package Microsoft.SqlServer.Types -ProjectName Examples\\WinFormSamples -reinstall -ignoreDependencies","Sql Server", + MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + // now show SqlServer dialog formSqlServerOpts = new FormSqlServerOpts() { MapBox = mapBox1, - LocalDbConnectionString = connStrBuilder.ToString() + ConnectionString = connStrBuilder.ToString() }; formSqlServerOpts.Show(this); break; diff --git a/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf b/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample.mdf deleted file mode 100644 index 8075594cd1d20d0f73d0b304eaf0888c772184cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3080192 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

    ZFK}etuI~-l8Kg_MHQ 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

    uJ%Vj-g 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

    28U|m9sNxEIn6pI28U`$Yt5cn<~7Z_H%VA9 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 qCYsP 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ê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νK-j4Uu#L9ZDQ;L}iz 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 I1m0iZU#FK{A^-pY diff --git a/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf b/Examples/WinFormSamples/GeoData/SqlServer/SqlServerSample_log.ldf deleted file mode 100644 index 1b8326768df83e99814311accdd1a319282995d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4071424 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 F&E~GAK*m6r{gEj*}mar_D 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 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q7Ut?bsm>03Zwlz!}~F|L2nkF!MDeH?uTN zCQgn30RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBm_3+x)zXWqEp?xjS4009C72oNAZfB*pk1PFX65Pv8* zNPqwV0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkJx GC~yEnb*#n! diff --git a/Examples/WinFormSamples/Properties/Settings.Designer.cs b/Examples/WinFormSamples/Properties/Settings.Designer.cs index 2beb8864..534b173d 100644 --- a/Examples/WinFormSamples/Properties/Settings.Designer.cs +++ b/Examples/WinFormSamples/Properties/Settings.Designer.cs @@ -47,11 +47,10 @@ public string SpatiaLiteConnectionString { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] - [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDb)\\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=.." + - "\\GeoData\\SqlServer\\SqlServerSample.mdf;")] - public string SqlServerLocalDbConnectionString { + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=;Initial Catalog=;Integrated Security=True")] + public string SqlServerConnectionString { get { - return ((string)(this["SqlServerLocalDbConnectionString"])); + return ((string)(this["SqlServerConnectionString"])); } } diff --git a/Examples/WinFormSamples/Properties/Settings.settings b/Examples/WinFormSamples/Properties/Settings.settings index 30cf6cd0..f900ee0b 100644 --- a/Examples/WinFormSamples/Properties/Settings.settings +++ b/Examples/WinFormSamples/Properties/Settings.settings @@ -16,12 +16,12 @@ </SerializableConnectionString> Data Source=GeoData\SpatiaLite\sample.sqlite; - + <?xml version="1.0" encoding="utf-16"?> <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <ConnectionString>Data Source=(LocalDb)\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=..\GeoData\SqlServer\SqlServerSample.mdf;</ConnectionString> + <ConnectionString>Data Source=;Initial Catalog=;Integrated Security=True</ConnectionString> </SerializableConnectionString> - Data Source=(LocalDb)\MSSQLLocalDB; Integrated Security=True; AttachDBFilename=..\GeoData\SqlServer\SqlServerSample.mdf; + Data Source=;Initial Catalog=;Integrated Security=True Microsoft.ACE.OLEDB.15.0 diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs index 2a95fd42..7f8bc694 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs @@ -30,6 +30,7 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSqlServerOpts)); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.labTable = new System.Windows.Forms.Label(); this.chkSpatialValidate = new System.Windows.Forms.CheckBox(); this.optSpatialGeog = new System.Windows.Forms.RadioButton(); this.optSpatialGeom = new System.Windows.Forms.RadioButton(); @@ -60,6 +61,7 @@ private void InitializeComponent() // // groupBox1 // + this.groupBox1.Controls.Add(this.labTable); this.groupBox1.Controls.Add(this.chkSpatialValidate); this.groupBox1.Controls.Add(this.optSpatialGeog); this.groupBox1.Controls.Add(this.optSpatialGeom); @@ -70,6 +72,16 @@ private void InitializeComponent() this.groupBox1.TabStop = false; this.groupBox1.Text = "Spatial Type"; // + // labTable + // + this.labTable.AutoSize = true; + this.labTable.ForeColor = System.Drawing.SystemColors.GrayText; + this.labTable.Location = new System.Drawing.Point(21, 91); + this.labTable.Name = "labTable"; + this.labTable.Size = new System.Drawing.Size(37, 13); + this.labTable.TabIndex = 3; + this.labTable.Text = "Table:"; + // // chkSpatialValidate // this.chkSpatialValidate.AutoSize = true; @@ -345,5 +357,6 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox groupBox5; private System.Windows.Forms.RadioButton optDataProviderNative; private System.Windows.Forms.RadioButton optDataProviderWKB; + private System.Windows.Forms.Label labTable; } } diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs index edf2defa..eaf07631 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs @@ -16,7 +16,7 @@ namespace WinFormSamples.Samples public partial class FormSqlServerOpts : Form { public SharpMap.Forms.MapBox MapBox { get; set; } - public string LocalDbConnectionString { get; set; } + public string ConnectionString { get; set; } public FormSqlServerOpts() { @@ -25,8 +25,10 @@ public FormSqlServerOpts() protected override void OnLoad(EventArgs e) { - // attach LocalDb and ensure spatial indexes are created for testing - SqlServerSample.InitialiseSpatialIndexes(LocalDbConnectionString); + // required for NuGet package Microsoft.SqlServer.Types + SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + + SqlServerSample.InitialiseTables(ConnectionString); WireHandlers(); @@ -63,24 +65,6 @@ private void WireHandlers() private void optDataProvider_Click(object sender, EventArgs e) { - // TODO - remove IF statement once integrated with SharpMap.SqlServerSpatialObjects - if (sender == this.optDataProviderNative) - { - optDataProviderNative.Checked = false; - optDataProviderWKB.Checked = true; - - MessageBox.Show("Data Provider", "To be added to sample in near future..."); - return; - } - - if (sender == this.optDataProviderNative && optSpatialGeog.Checked) - { - optDataProviderNative.Checked = false; - optDataProviderWKB.Checked = true; - - MessageBox.Show("Data Provider", "SharpMap.SqlServerSpatialObjects currently only support Geometry"); - } - // re-create layers optSpatial_Click(null, null); } @@ -98,30 +82,30 @@ private void optSpatial_Click(object sender, EventArgs e) if (optSpatialGeog.Checked) { - spatialTable = "[dbo].[CitiesSqlGeog]"; + spatialTable =SqlServerSample.GeogTable; geomColumn = "Geog4326"; geomType = SqlServerSpatialObjectType.Geography; - symBrush = new SolidBrush(Color.DodgerBlue); + symBrush = new SolidBrush(optDataProviderWKB.Checked? Color.Orange : Color.DeepSkyBlue); + labTable.Text = "Table: " + SqlServerSample.GeogTable; } else { - spatialTable = "[dbo].[CitiesSqlGeom]"; + // ensure checked + optSpatialGeom.Checked = true; + spatialTable = SqlServerSample.GeomTable; geomColumn = "Geom4326"; geomType = SqlServerSpatialObjectType.Geometry; - symBrush = new SolidBrush(Color.Red); + symBrush = new SolidBrush(optDataProviderWKB.Checked ? Color.Red : Color.DodgerBlue ); + labTable.Text = "Table: " + SqlServerSample.GeomTable; } spatialLyr = new SharpMap.Layers.VectorLayer("Spatial"); if (optDataProviderWKB.Checked) - spatialLyr.DataSource = new SqlServer2008(LocalDbConnectionString, spatialTable, geomColumn, "Id", geomType); + spatialLyr.DataSource = new SqlServer2008(ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); else - { - //TODO - uncomment when reference is added to SharpMap.SqlServerSpatialObjects - //spatialLyr.DataSource = new SqlServer2008Ex (LocalDbConnectionString, spatialTable, geomColumn, "Id"); - } - + spatialLyr.DataSource = new SqlServer2008Ex (ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); - spatialLyr.SRID = 4326; + //spatialLyr.SRID = 4326; spatialLyr.TargetSRID = 3857; spatialLyr.Style.PointColor = symBrush; diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx b/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx index 32dc2701..0b5f5427 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.resx @@ -119,13 +119,10 @@ Notes: -The LocalDb mdf is packaged with this sample and contains 2 tables with identical data in WGS84 for 16 SE Asian cities using different spatial types (Geometry vs Geography). Map uses WebMercator, with layers transformed on-the-fly. +Requires a valid SQL Server Connection string defined in Project Settings. Sample tables, spatial indexes, and data will be created as required. -Select either SQL Geometry or SQL Geography to switch between spatial types (clears and re-loads vector layer). The different options presented here alter the behaviour of data provider as it selects data from the database. SQL queries are output to console so you can see the syntax used. Repeating Get Extents will usually show faster times due to Sql Server caching of query plan. +Select a SharpMap SQL Data Provider, then either SQL Geometry or SQL Geography to switch between spatial types (clears and re-loads vector layer). The different options presented here alter the behaviour of data provider as it selects data from the database. SQL queries are output to console so you can see the syntax used. Repeating Get Extents will usually show faster times due to Sql Server caching of query plan. -You may need to install Sql Server LocalDb for this sample to work. LocalDb runs on the application thread - performance will be noticably slower than running against a fully-fledged SQL Server instance. Spatial Indexes are created once per session - please be patient. - -Finally, if you want to use SharpMap.SqlServerSpatialObjects in your own work, refer to ReadMe.txt in that project for configuration and runtime requirements. - +Finally, to use in your own work, you will need to reference Microsoft.SqlServer.Types (and SqlServerxxx.dll if using native types). This project references both via NuGet package Microsoft.SqlServer.Types, defines a BindingRedirect in app.config, and loads the native assemblies during FormSqlServerOpts::OnLoad. \ No newline at end of file diff --git a/Examples/WinFormSamples/Samples/SqlServerSample.cs b/Examples/WinFormSamples/Samples/SqlServerSample.cs index b9700c61..577d0058 100644 --- a/Examples/WinFormSamples/Samples/SqlServerSample.cs +++ b/Examples/WinFormSamples/Samples/SqlServerSample.cs @@ -16,13 +16,14 @@ namespace WinFormSamples.Samples { static class SqlServerSample { - + public const string GeogTable = "dbo.CitiesSqlGeog"; public const string GeogSpatialIndex = "SIDX_CitiesSqlGeog_Geog4326"; + + public const string GeomTable = "dbo.CitiesSqlGeom"; public const string GeomSpatialIndex = "SIDX_CitiesSqlGeom_Geom4326"; public static SharpMap.Map InitializeMap(float angle) { - //Initialize a new map of size 'imagesize' SharpMap.Map map = new SharpMap.Map { SRID = 3857 @@ -39,6 +40,7 @@ public static SharpMap.Map InitializeMap(float angle) map.BackgroundLayer.Add(lyrBruTile); map.BackColor = System.Drawing.Color.LightBlue; + // SE Asia map.ZoomToBox(new Envelope(6943700, 19849100, -1472900, 6198900)); Matrix mat = new Matrix(); @@ -48,60 +50,106 @@ public static SharpMap.Map InitializeMap(float angle) return map; } - public static void InitialiseSpatialIndexes(string connStr) + public static void InitialiseTables(string connStr) { - var table = "dbo.CitiesSqlGeom"; - var idx = GeomSpatialIndex; - - if (!DoesSpatialIndexExist(connStr, table, idx)) + using (SqlConnection conn = new SqlConnection(connStr)) { - CreateSpatialIndex(connStr, - $"CREATE SPATIAL INDEX [{idx}] ON {table}(Geom4326) WITH(BOUNDING_BOX = (96, -7, 140, 40))"); - } + conn.Open(); - table = "dbo.CitiesSqlGeog"; - idx = GeogSpatialIndex; - if (!DoesSpatialIndexExist(connStr, table, idx)) - { - CreateSpatialIndex(connStr, $"CREATE SPATIAL INDEX [{idx}] ON {table}(Geog4326);"); - } + // GEOMETRY table, spatial index, and data + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT OBJECT_ID (N'{GeomTable}', N'U')"; + if (cmd.ExecuteScalar() == DBNull.Value) + { + cmd.CommandText = $"CREATE TABLE {GeomTable} (ID int PRIMARY KEY, NAME nvarchar(50), Geom4326 geometry)"; + cmd.ExecuteNonQuery(); + } + } - } + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT object_id FROM sys.indexes WHERE object_id = OBJECT_ID('{GeomTable}') AND name='{GeomSpatialIndex}'"; + if (cmd.ExecuteScalar() == null) + { + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeomSpatialIndex}] ON {GeomTable}(Geom4326) WITH(BOUNDING_BOX = (96, -7, 140, 40))"; + cmd.ExecuteNonQuery(); + } + } - private static bool DoesSpatialIndexExist(string connStr, string tableName, string indexName) - { - int indexId = 0; + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT COUNT(ID) FROM {GeomTable}"; + if ((int)cmd.ExecuteScalar() == 0) + { + cmd.CommandText = "INSERT INTO [dbo].[CitiesSqlGeom] ([Id], [Name], [Geom4326]) VALUES " + + "(1, N'Bandar Seri Bagawan', geometry::Point(114.942222, 4.890278, 4326))," + + "(2, N'Bangkok', geometry::Point(100.501765, 13.756331, 4326))," + + "(3, N'Beijing', geometry::Point(116.407395, 39.904211, 4326))," + + "(4, N'Hanoi', geometry::Point(105.83416, 21.027764, 4326))," + + "(5, N'Hong Kong', geometry::Point(114.109497, 22.396428, 4326))," + + "(6, N'Jakarta', geometry::Point(106.845599, -6.208763, 4326))," + + "(7, N'Kuala Lumpur', geometry::Point(101.686855, 3.139003, 4326))," + + "(8, N'Manila', geometry::Point(120.984219, 14.599512, 4326))," + + "(9, N'Phnom Penh', geometry::Point(104.892167, 11.544873, 4326))," + + "(10, N'Pyong Yang', geometry::Point(125.762524, 39.039219, 4326))," + + "(11, N'Seoul', geometry::Point(126.977969, 37.566535, 4326))," + + "(12, N'Singapore', geometry::Point(103.819836, 1.352083, 4326))," + + "(13, N'Taipei', geometry::Point(121.565418, 25.032969, 4326))," + + "(14, N'Tokoyo', geometry::Point(139.691706, 35.689487, 4326))," + + "(15, N'Vientienne', geometry::Point(102.633104, 17.975706, 4326))," + + "(16, N'Yangoon', geometry::Point(96.195132, 16.866069, 4326))"; + cmd.ExecuteNonQuery(); + } + } - var sql = $"SELECT object_id FROM sys.indexes WHERE object_id = OBJECT_ID('{tableName}') AND name='{indexName}'"; + // GEOGRAPHY table, spatial index, and data + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT OBJECT_ID (N'{GeogTable}', N'U')"; + if (cmd.ExecuteScalar() == DBNull.Value) + { + cmd.CommandText = $"CREATE TABLE {GeogTable} (ID int PRIMARY KEY, NAME nvarchar(50), Geog4326 geography)"; + cmd.ExecuteNonQuery(); + } + } - using (var conn = new System.Data.SqlClient.SqlConnection(connStr)) - { - using (var cmd = new SqlCommand(sql, conn)) + using (SqlCommand cmd = conn.CreateCommand()) { - conn.Open(); - using (var reader = cmd.ExecuteReader()) + cmd.CommandText = $"SELECT object_id FROM sys.indexes WHERE object_id = OBJECT_ID('{GeogTable}') AND name='{GeogSpatialIndex}'"; + if (cmd.ExecuteScalar() == null) { - while (reader.Read()) - { - indexId = reader.GetInt32(0); - } + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeogSpatialIndex}] ON {GeogTable}(Geog4326);"; + cmd.ExecuteNonQuery(); } } - } - return (indexId > 0); - } - private static void CreateSpatialIndex(string connStr, string sql) - { - using (var conn = new System.Data.SqlClient.SqlConnection(connStr)) - { - using (var cmd = new SqlCommand(sql, conn)) + using (SqlCommand cmd = conn.CreateCommand()) { - conn.Open(); - cmd.ExecuteNonQuery(); + cmd.CommandText = $"SELECT COUNT(ID) FROM {GeogTable}"; + if ((int)cmd.ExecuteScalar() == 0) + { + cmd.CommandText = "INSERT INTO [dbo].[CitiesSqlGeog] ([Id], [Name], [Geog4326]) VALUES " + + "(1, N'Bandar Seri Bagawan', geography::Point(4.890278, 114.942222, 4326))," + + "(2, N'Bangkok', geography::Point(13.756331, 100.501765, 4326))," + + "(3, N'Beijing', geography::Point(39.904211, 116.407395, 4326))," + + "(4, N'Hanoi', geography::Point(21.027764, 105.83416, 4326))," + + "(5, N'Hong Kong', geography::Point(22.396428, 114.109497, 4326))," + + "(6, N'Jakarta', geography::Point(-6.208763, 106.845599, 4326))," + + "(7, N'Kuala Lumpur', geography::Point(3.139003, 101.686855, 4326))," + + "(8, N'Manila', geography::Point(14.599512, 120.984219, 4326))," + + "(9, N'Phnom Penh', geography::Point(11.544873, 104.892167, 4326))," + + "(10, N'Pyong Yang', geography::Point(39.039219, 125.762524, 4326))," + + "(11, N'Seoul', geography::Point(37.566535, 126.977969, 4326))," + + "(12, N'Singapore', geography::Point(1.352083, 103.819836, 4326))," + + "(13, N'Taipei', geography::Point(25.032969, 121.565418, 4326))," + + "(14, N'Tokoyo', geography::Point(35.689487, 139.691706, 4326))," + + "(15, N'Vientienne', geography::Point(17.975706, 102.633104, 4326))," + + "(16, N'Yangoon', geography::Point(16.866069, 96.195132, 4326));"; + cmd.ExecuteNonQuery(); + } } } } - } } diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index 7e74dd25..f9bab267 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -89,6 +89,9 @@ ..\..\packages\log4net.2.0.7\lib\net40-full\log4net.dll + + ..\..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll @@ -180,6 +183,20 @@ + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + FormSqlServerOpts.cs @@ -400,13 +417,6 @@ Designer - - Always - - - Always - SqlServerSample.mdf - PreserveNewest @@ -553,6 +563,10 @@ {47F790C2-6DC0-4A09-9026-FC81A09FD6A3} SharpMap.Layers.HeatLayer + + {6d681045-8ef1-44ea-a19d-c7a63a6d0f76} + SharpMap.SqlServerSpatialObjects + {C83777FC-AABB-47D9-911F-D76255D4D541} SharpMap diff --git a/Examples/WinFormSamples/app.config b/Examples/WinFormSamples/app.config index 21c70370..ef200ea7 100644 --- a/Examples/WinFormSamples/app.config +++ b/Examples/WinFormSamples/app.config @@ -1,95 +1,96 @@ - + - - -

    - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Microsoft.ACE.OLEDB.15.0 - - - + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft.ACE.OLEDB.15.0 + + + diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index bf3a3185..8310b003 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -11,6 +11,7 @@ + From 3e2209f1bfad047d5250b1c3a05c63b6d0ec009f Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 17 Nov 2018 12:10:36 +0700 Subject: [PATCH 079/186] Updates as per review --- SharpMap/Data/Providers/SqlServer2008.cs | 25 ++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 418a1ee2..83901e5d 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -60,17 +60,17 @@ public enum SqlServerSpatialObjectType public enum SqlServer2008ExtentsMode { /// - /// Reads through all features in the table to determine extents + /// Client retrieves and reads through all features in the table to determine extents /// QueryIndividualFeatures, /// - /// Directly reads the bounds of the spatial index from the system tables (very fast, but does not take actual data extents or into account) + /// Supported by .Geometry only, reading the bounds of the spatial index directly from the system tables (very fast, but does not take into account actual data extents or ) /// SpatialIndex, /// - /// Uses the EnvelopeAggregate aggregate function introduced in SQL Server 2012 (recommended) + /// Uses Aggregate functions introduced in SQL Server 2012 (recommended, server aggregates data and returns single record to client) /// EnvelopeAggregate } @@ -178,19 +178,19 @@ public class SqlServer2008 : BaseProvider public int MaxDop { get; set; } /// - /// Initializes a new connection to SQL Server for Geometry spatial type in column named SHAPE and default Extents mode + /// Initializes a new connection to SQL Server for .Geometry in column named SHAPE with default /// /// Connectionstring /// Name of data table /// Name of column with unique identifier [Obsolete] public SqlServer2008(string connectionStr, string tablename, string oidColumnName) - : this(connectionStr, tablename, "shape", oidColumnName, SqlServerSpatialObjectType.Geometry) + : this(connectionStr, tablename, "SHAPE", oidColumnName, SqlServerSpatialObjectType.Geometry) { } /// - /// Initializes a new connection to SQL Server for spatial column named SHAPE and default Extents mode + /// Initializes a new connection to SQL Server for spatial column named SHAPE with default /// /// Connectionstring /// Name of data table @@ -199,12 +199,12 @@ public SqlServer2008(string connectionStr, string tablename, string oidColumnNam [Obsolete] public SqlServer2008(string connectionStr, string tablename, string oidColumnName, SqlServerSpatialObjectType spatialObjectType) - : this(connectionStr, tablename, "shape", oidColumnName, spatialObjectType) + : this(connectionStr, tablename, "SHAPE", oidColumnName, spatialObjectType) { } /// - /// Initializes a new connection to SQL Server for Geometry spatial type with default Extents mode + /// Initializes a new connection to SQL Server for .Geometry with default /// /// Connectionstring /// Name of data table @@ -217,7 +217,7 @@ public SqlServer2008(string connectionStr, string tablename, string geometryColu } /// - /// Initializes a new connection to SQL Server with default Extents mode + /// Initializes a new connection to SQL Server with default /// /// Connectionstring /// Name of data table @@ -239,7 +239,7 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum /// Name of spatial column /// Name of column with unique identifier /// spatial type (Geometry or Geography) - /// If true, the bounds of the spatial index is used for the GetExtents() method which significantly improves performance instead of reading through all features in the table + /// True sets ExtentsMode to SqlServer2008ExtentsMode.SpatialIndex [Obsolete] public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, SqlServerSpatialObjectType spatialObjectType, bool useSpatialIndexExtentAsExtent) @@ -257,7 +257,7 @@ public SqlServer2008(string connectionStr, string tablename, string spatialColum /// Name of spatial column /// Name of column with unique identifier /// spatial type (Geometry or Geography) - /// If true, the bounds of the spatial index is used for the GetExtents() method which heavily increases performance instead of reading through all features in the table + /// True sets ExtentsMode to SqlServer2008ExtentsMode.SpatialIndex /// The spatial reference id [Obsolete] public SqlServer2008(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, @@ -579,10 +579,11 @@ protected string GetBoxFilterStr(Envelope bbox) if (SpatialObjectType == SqlServerSpatialObjectType.Geography) bbox = bbox.Intersection(GeogMaxExtents); - var bboxText = Converters.WellKnownText.GeometryToWKT.Write(Factory.ToGeometry(bbox)); + var bboxText = Factory.ToGeometry(bbox).ToString(); // STGeomFromText applicable to both Geometry AND Geography (ie x,y ordinate order) if (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex) || NoLockHint) + // .MakeValid() cannot be used in conjunction with Hints return $"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; else return $"{GeometryColumn}{GetMakeValidString()}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; From 2bd18d2e96e80f5db99e7f697561a342a4fbb0d3 Mon Sep 17 00:00:00 2001 From: Tim C Date: Fri, 23 Nov 2018 00:45:12 +0700 Subject: [PATCH 080/186] Use NTS.Io.WkbReader; handle null, empty, and invalid geometries; --- SharpMap/Data/Providers/SqlServer2008.cs | 194 +++++++++++++---------- 1 file changed, 106 insertions(+), 88 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 83901e5d..d870c1b3 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -22,7 +22,7 @@ // Note - Supports both Geometry AND Geography types for SQL Server 2008 onwards. // The '2008' suffix in the class name is to distinguish from SharpMap.Data.Providers.MsSqlSpatial provider (Sql Server 2005). // SqlServer2008 requests WKB from the database (hence will work with Sql Server 2008, 2012, 2016 etc), -// and WKB is then parsed to an IGeometry instance using SharpMap.Converters.WellKnownBinary.GeometryFromWKB +// and WKB is then parsed to an IGeometry instance using NetTopologySuite.IO.WkbReader // // Alternatively, to work with native Sql Spatial types, see SharpMap.SqlServerSpatialObjects which requests // raw spatial bytes from the database and uses Microsoft.SqlServer.Types to convert Sql bytes on the client. @@ -35,6 +35,7 @@ using System.Text; using GeoAPI.Geometries; using Common.Logging; +using GeoAPI; namespace SharpMap.Data.Providers { @@ -339,7 +340,7 @@ public string ConnectionString set { ConnectionID = value; } } - private string GetMakeValidString() + protected string GetMakeValidString() { return ValidateGeometries ? ".MakeValid()" : String.Empty; } /// @@ -460,7 +461,7 @@ protected string BuildTableHints() } return string.Empty; } - + /// /// Returns geometries within the specified bounding box /// @@ -471,11 +472,14 @@ public override Collection GetGeometriesInView(Envelope bbox) var features = new Collection(); using (var conn = new SqlConnection(ConnectionString)) { - var sb = new StringBuilder($"SELECT {GeometryColumn}.STAsBinary() FROM {QualifiedTable} {BuildTableHints()} WHERE "); + var sb = new StringBuilder($"SELECT {GeometryColumn}{GetMakeValidString()}.STAsBinary() FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append($"{DefinitionQuery} AND "); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries ) + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometriesInView {0}", sb.ToString()); @@ -485,11 +489,12 @@ public override Collection GetGeometriesInView(Envelope bbox) conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) { + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); while (dr.Read()) { if (dr[0] != DBNull.Value) { - var geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); + var geom = wkbReader.Read((byte[])dr[0]); if (geom != null) features.Add(geom); } @@ -510,7 +515,7 @@ public override IGeometry GetGeometryByID(uint oid) IGeometry geom = null; using (var conn = new SqlConnection(ConnectionString)) { - string strSql = $"SELECT {GeometryColumn}.STAsBinary() FROM {QualifiedTable} " + + string strSql = $"SELECT {GeometryColumn}{GetMakeValidString()}.STAsBinary() FROM {QualifiedTable} " + $"WHERE {ObjectIdColumn}={oid}"; if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); @@ -520,10 +525,11 @@ public override IGeometry GetGeometryByID(uint oid) conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) { + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); while (dr.Read()) { if (dr[0] != DBNull.Value) - geom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); + geom = wkbReader.Read((byte[])dr[0]); } } } @@ -546,6 +552,9 @@ public override Collection GetObjectIDsInView(Envelope bbox) if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append(DefinitionQuery + " AND "); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries) + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); if (_logger.IsDebugEnabled) _logger.DebugFormat("GetObjectIDsInView {0}", sb.ToString()); @@ -581,12 +590,12 @@ protected string GetBoxFilterStr(Envelope bbox) var bboxText = Factory.ToGeometry(bbox).ToString(); + // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: + // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. + var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" + // STGeomFromText applicable to both Geometry AND Geography (ie x,y ordinate order) - if (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex) || NoLockHint) - // .MakeValid() cannot be used in conjunction with Hints - return $"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; - else - return $"{GeometryColumn}{GetMakeValidString()}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; + return $"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{bboxText}', {SRID}){_reorientObject})=1"; } /// @@ -594,54 +603,29 @@ protected string GetBoxFilterStr(Envelope bbox) /// /// /// FeatureDataSet to fill data into - protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet ds) + protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet fds) { - using (var conn = new SqlConnection(ConnectionString)) + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) { - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - // Define Ring with Clockwise orientation, to be reoriented in query - var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { + // Define Ring with Clockwise orientation, to be reoriented in query + var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), GeogMaxExtents.BottomLeft()}); - geom = geom.Intersection(maxExentsPoly); - } + geom = geom.Intersection(maxExentsPoly); + } - var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + - $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() As {SharpMapWkb} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - if (!String.IsNullOrEmpty(DefinitionQuery)) - sb.Append($"{DefinitionQuery} AND "); + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); - sb.Append($"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); + sb.Append($"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); - if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); + if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); - using (var adapter = new SqlDataAdapter(sb.ToString(), conn)) - { - conn.Open(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - foreach (System.Data.DataRow dr in ds.Tables[0].Rows) - { - FeatureDataRow fdr = fdt.NewRow(); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) - fdr[col.ColumnName] = dr[col]; - fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], Factory); - fdt.AddRow(fdr); - } - ds.Tables.Add(fdt); - } - } - } + ExecuteIntersectionQuery(sb.ToString(), fds); } /// @@ -691,7 +675,7 @@ public override FeatureDataRow GetFeature(uint rowId) { using (var conn = new SqlConnection(ConnectionString)) { - var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}.STAsBinary() As {SharpMapWkb} " + + var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() As {SharpMapWkb} " + $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); @@ -716,7 +700,8 @@ public override FeatureDataRow GetFeature(uint rowId) if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; - fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], Factory); + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); + fdr.Geometry = wkbReader.Read((byte[])dr[SharpMapWkb]); return fdr; } @@ -736,6 +721,7 @@ public override Envelope GetExtents() using (var conn = new SqlConnection(ConnectionString)) { conn.Open(); + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); string sql; switch (ExtentsMode) { @@ -767,15 +753,22 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.QueryIndividualFeatures: if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) - // GEOMETRY returns 1 row for each feature - sql = $"SELECT {GeometryColumn}{GetMakeValidString()}.STEnvelope().STAsBinary() FROM {QualifiedTable}"; + // GEOMETRY returns 1 row for each feature. MUST call MakeValid() here + sql = $"SELECT {GeometryColumn}.MakeValid().STEnvelope().STAsBinary() FROM {QualifiedTable}"; else - // GEOGRAPHY returns single row with multi-geometry containing all features - sql = $"SELECT {_spatialTypeString}::CollectionAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; + // GEOGRAPHY returns single row with multi-geometry containing all features. MUST call MakeValid() here + sql = $"SELECT {_spatialTypeString}::CollectionAggregate({GeometryColumn}.MakeValid()).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) sql += $" WHERE {DefinitionQuery}"; + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + { + sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; + // MUST explicitly exlude NULLS for EnvelopeAggregate + sql += "GEOM IS NOT NULL"; + } + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); using (var command = new SqlCommand(sql, conn)) @@ -785,8 +778,11 @@ public override Envelope GetExtents() { while (dr.Read()) { - var g = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); - bx.ExpandToInclude(g.EnvelopeInternal); + if (dr[0] != DBNull.Value) + { + var g = wkbReader.Read((byte[])dr[0]); + bx.ExpandToInclude(g.EnvelopeInternal); + } } } return bx; @@ -795,16 +791,23 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.EnvelopeAggregate: if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) - // GEOMETRY EnvelopeAggregate returns RECTILINEAR polygon - sql = $"SELECT {_spatialTypeString}::EnvelopeAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; + // GEOMETRY EnvelopeAggregate returns RECTILINEAR polygon . Note that {GetMakeValidString()} cannot be used with EnvelopeAggregate + sql = $"SELECT {_spatialTypeString}::EnvelopeAggregate({GeometryColumn}).STAsBinary() FROM {QualifiedTable}"; else // GEOGRAPHY EnvelopeAggregate returns CURVED polygon (not supported by SharpMap), - // so use ConvextHullAggregate to return POLYGON - sql = $"SELECT {_spatialTypeString}::ConvexHullAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; + // so use ConvextHullAggregate to return POLYGON and FORCE .MakeValid + sql = $"SELECT {_spatialTypeString}::ConvexHullAggregate({GeometryColumn}.MakeValid()).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) sql += $" WHERE {DefinitionQuery}"; + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + { + sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; + // MUST explicitly exlude NULLS / Invalids PRIOR to EnvelopeAggregate + sql += "GEOM IS NOT NULL AND GEOM.STIsValid()=1"; + } + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); using (var command = new SqlCommand(sql, conn)) @@ -813,8 +816,11 @@ public override Envelope GetExtents() { if (dr.Read()) { - var g = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[0], Factory); - return g.EnvelopeInternal; + if (dr[0] != DBNull.Value) + { + var g = wkbReader.Read((byte[])dr[0]); + return g.EnvelopeInternal; + } } } } @@ -833,52 +839,64 @@ public override Envelope GetExtents() /// /// view box /// FeatureDataSet to fill data into - public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet ds) + public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet fds) { - using (var conn = new SqlConnection(ConnectionString)) - { - var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() AS {SharpMapWkb} " + - $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() AS {SharpMapWkb} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - if (!String.IsNullOrEmpty(DefinitionQuery)) - sb.Append($"{DefinitionQuery} AND "); + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); - sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries) + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); + + if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); + + ExecuteIntersectionQuery(sb.ToString(), fds); + } + + #endregion - if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); + private void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) + { + using (var conn = new SqlConnection(ConnectionString)) + { + conn.Open(); - using (var adapter = new SqlDataAdapter(sb.ToString(), conn)) + using (var adapter = new SqlDataAdapter(sql, conn)) { - conn.Open(); - var ds2 = new System.Data.DataSet(); - adapter.Fill(ds2); + var ds = new System.Data.DataSet(); + adapter.Fill(ds); conn.Close(); - if (ds2.Tables.Count > 0) + + if (ds.Tables.Count > 0) { - var fdt = new FeatureDataTable(ds2.Tables[0]); - foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - foreach (System.Data.DataRow dr in ds2.Tables[0].Rows) + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); + foreach (System.Data.DataRow dr in ds.Tables[0].Rows) { FeatureDataRow fdr = fdt.NewRow(); - foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; - fdr.Geometry = - Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[SharpMapWkb], - Factory); + + if (dr[SharpMapWkb] != DBNull.Value) + fdr.Geometry = wkbReader.Read((byte[])dr[SharpMapWkb]); fdt.AddRow(fdr); } - ds.Tables.Add(fdt); + fds.Tables.Add(fdt); } } } - } - #endregion + } } } From 020bde58833981ad1c5c0e9c98ff2b08793d1fac Mon Sep 17 00:00:00 2001 From: Tim C Date: Fri, 23 Nov 2018 00:46:16 +0700 Subject: [PATCH 081/186] Add null, empty, and invalid geometries to SqlServer2008DbTests --- .../Data/Providers/SQLServer2008Tests.cs | 146 ++++++++++++------ 1 file changed, 103 insertions(+), 43 deletions(-) diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index ee125e46..235e3602 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -40,6 +40,9 @@ public void VerifySchemaDetection(string schemaTable, string tableSchema, string [Ignore("Requires SqlServerSpatial")] public class SQLServer2008DbTests { + private const string GeometrySpatialIndex = "IX_roads_ugl_GEOM"; + private const string GeographySpatialIndex = "IX_roads_ugl_GEOG"; + private string GetTestFile() { return Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); @@ -77,7 +80,6 @@ public void SetupFixture() cmd.ExecuteNonQuery(); } - // Load data using (SharpMap.Data.Providers.ShapeFile shapeFile = new SharpMap.Data.Providers.ShapeFile(GetTestFile())) { @@ -94,40 +96,36 @@ public void SetupFixture() { SharpMap.Data.FeatureDataRow feature = shapeFile.GetFeature(idx); - //using (SqlCommand cmd = conn.CreateCommand()) - //{ - // cmd.CommandText = "INSERT INTO roads_ugl(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))"; + string wkt; + + if (feature.Geometry == null || feature.Geometry.IsEmpty) + wkt = "LINESTRING EMPTY"; + else + wkt = feature.Geometry.AsText(); - // cmd.Parameters.AddWithValue("@Geom", feature.Geometry.AsText()); - // cmd.Parameters.AddWithValue("@Name", feature["NAME"]); - // cmd.Parameters.AddWithValue("@Srid", shapeFile.SRID); - // cmd.ExecuteNonQuery(); - //} if (cmdGeom.Parameters.Count == 0) { - cmdGeom.Parameters.AddWithValue("@Geom", feature.Geometry.AsText()); + cmdGeom.Parameters.AddWithValue("@Geom", wkt); cmdGeom.Parameters.AddWithValue("@Name", feature["NAME"]); cmdGeom.Parameters.AddWithValue("@Srid", shapeFile.SRID); } else { - cmdGeom.Parameters[0].Value = feature.Geometry.AsText(); + cmdGeom.Parameters[0].Value = wkt; cmdGeom.Parameters[1].Value = feature["NAME"]; - cmdGeom.Parameters[2].Value= shapeFile.SRID; } cmdGeom.ExecuteNonQuery(); if (cmdGeog.Parameters.Count == 0) { - cmdGeog.Parameters.AddWithValue("@Geog", feature.Geometry.AsText()); + cmdGeog.Parameters.AddWithValue("@Geog", wkt); cmdGeog.Parameters.AddWithValue("@Name", feature["NAME"]); cmdGeog.Parameters.AddWithValue("@Srid", 4326); } else { - cmdGeog.Parameters[0].Value = feature.Geometry.AsText(); + cmdGeog.Parameters[0].Value = wkt; cmdGeog.Parameters[1].Value = feature["NAME"]; - //cmdGeog.Parameters[2].Value = 4326; } cmdGeog.ExecuteNonQuery(); } @@ -136,13 +134,47 @@ public void SetupFixture() cmdGeog.Dispose(); } - // Create spatial indexes + // ensure we have some features with NULL and EMPTY geometries + using (var cmd = conn.CreateCommand()) + { + // To find invalid geometries: + // SELECT {OidColumn}, {GeometryColumn}.STIsValid() AS STIsValid, {GeometryColumn}.IsValidDetailed() AS IsValidDetailed FROM {QualifiedTableName} + + // NULL + cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test null wkt', NULL)"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test null wkt', NULL)"; + cmd.ExecuteNonQuery(); + + // EMPTY + cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; + cmd.ExecuteNonQuery(); + + // INVALID (ID 144 from shape file; see also ID 2055) + cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test invalid wkt', geometry::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', 4326))"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test invalid wkt', geography::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', 4326))"; + cmd.ExecuteNonQuery(); + } + + // Create GEOM spatial index using (SqlCommand cmd = conn.CreateCommand()) { - cmd.CommandText = "CREATE SPATIAL INDEX [IX_roads_ugl_GEOM] ON [dbo].[roads_ugl_geom](GEOM) USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeometrySpatialIndex}] ON [dbo].[roads_ugl_geom](GEOM) USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; + cmd.CommandTimeout = 300; cmd.ExecuteNonQuery(); + } - cmd.CommandText = "CREATE SPATIAL INDEX [IX_roads_ugl_GEOG] ON [dbo].[roads_ugl_geog](GEOG)"; + // Create GEOG spatial index + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeographySpatialIndex}] ON [dbo].[roads_ugl_geog](GEOG)"; + cmd.CommandTimeout = 300; cmd.ExecuteNonQuery(); } } @@ -157,7 +189,7 @@ public void TearDownTestFixture() return; } - // Drop sample table + // Drop sample tables using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) { conn.Open(); @@ -171,22 +203,27 @@ public void TearDownTestFixture() } } - //private SharpMap.Data.Providers.SqlServer2008 GetTestProvider() - //{ - // return GetTestProvider(SqlServerSpatialObjectType.Geometry); - //} - private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialObjectType spatialType) { switch (spatialType) { case SqlServerSpatialObjectType.Geography: // NB note forcing WGS84 - return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geog", "GEOG", "ID", spatialType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); + return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures) + { + //ValidateGeometries = true + //, + //DefinitionQuery = "ID NOT IN (103)" // Invalid Geom + }; default: - return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geom", "GEOM", "ID", spatialType); + return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType) + { + //ValidateGeometries = true + //, + //DefinitionQuery = "ID NOT IN (103)" // Invalid Geom + }; } } @@ -272,7 +309,12 @@ public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType) var geometries = sq.GetGeometriesInView(GetTestEnvelope()); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + + if (spatialType == SqlServerSpatialObjectType.Geography) + Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, geometries.Count); + else + Assert.AreEqual(100, geometries.Count); + } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -299,7 +341,10 @@ public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType var geometries = sq.GetGeometriesInView(GetTestEnvelope()); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + if (spatialType == SqlServerSpatialObjectType.Geography) + Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, geometries.Count); + else + Assert.AreEqual(100, geometries.Count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -315,8 +360,8 @@ public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialT Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex)] public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatialType, string indexName) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); @@ -328,15 +373,19 @@ public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatial Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] - public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialType, string indexName) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] + public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeoms) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; sq.ForceIndex = indexName; + + sq.ValidateGeometries = validateGeoms; var geometries = sq.GetGeometriesInView(GetTestEnvelope()); Assert.IsNotNull(geometries); @@ -413,24 +462,34 @@ public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType) var objectIds = sq.GetObjectIDsInView(GetTestEnvelope()); Assert.IsNotNull(objectIds); - Assert.AreEqual(100, objectIds.Count); + if (spatialType == SqlServerSpatialObjectType.Geography) + Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, objectIds.Count); + else + Assert.AreEqual(100, objectIds.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] + public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType, bool validateGeoms) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + sq.ValidateGeometries = validateGeoms; + SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); sq.ExecuteIntersectionQuery(GetTestEnvelope(), ds); - Assert.AreEqual(100, ds.Tables[0].Rows.Count); + if (spatialType == SqlServerSpatialObjectType.Geography) + Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, ds.Tables[0].Rows.Count); + else + Assert.AreEqual(100, ds.Tables[0].Rows.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, "IX_roads_ugl_GEOM")] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, "IX_roads_ugl_GEOG")] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex)] public void TestExecuteIntersectionQueryAllHints(SqlServerSpatialObjectType spatialType, string indexName) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); @@ -454,7 +513,8 @@ public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) int count = sq.GetFeatureCount(); - Assert.AreEqual(100, count); + // 100 valid + 3 invalid + Assert.AreEqual(103, count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] From 6fc3a420620d2cf34018ab897ab76e6639d82558 Mon Sep 17 00:00:00 2001 From: Tim C Date: Fri, 23 Nov 2018 07:37:40 +0700 Subject: [PATCH 082/186] Fix hard-coded spatial column name in GetExtents --- SharpMap/Data/Providers/SqlServer2008.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index d870c1b3..e795f48e 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -766,7 +766,7 @@ public override Envelope GetExtents() { sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; // MUST explicitly exlude NULLS for EnvelopeAggregate - sql += "GEOM IS NOT NULL"; + sql += $"{GeometryColumn} IS NOT NULL"; } if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); @@ -805,7 +805,7 @@ public override Envelope GetExtents() { sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; // MUST explicitly exlude NULLS / Invalids PRIOR to EnvelopeAggregate - sql += "GEOM IS NOT NULL AND GEOM.STIsValid()=1"; + sql += $"{GeometryColumn} IS NOT NULL AND {GeometryColumn}.STIsValid()=1"; } if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); From 8959f91e8024f9361dd8c0fce3036437537a5c15 Mon Sep 17 00:00:00 2001 From: Tim C Date: Mon, 26 Nov 2018 22:13:18 +0700 Subject: [PATCH 083/186] Final commit to resolve issues with GetExtents, Hints, and ValidateGeometries (subject to spatial object type and number of records at which indexes are used) --- .../Samples/FormSqlServerOpts.cs | 6 +- .../Data/Providers/SqlServer2008Ex.cs | 25 ++- SharpMap/Data/Providers/SqlServer2008.cs | 54 +++-- .../Data/Providers/SQLServer2008Tests.cs | 187 +++++++++++------- 4 files changed, 174 insertions(+), 98 deletions(-) diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs index eaf07631..3796235a 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs @@ -103,9 +103,9 @@ private void optSpatial_Click(object sender, EventArgs e) if (optDataProviderWKB.Checked) spatialLyr.DataSource = new SqlServer2008(ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); else - spatialLyr.DataSource = new SqlServer2008Ex (ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); + //spatialLyr.DataSource = new SqlServer2008Ex (ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); - //spatialLyr.SRID = 4326; + spatialLyr.SRID = spatialLyr.DataSource.SRID; spatialLyr.TargetSRID = 3857; spatialLyr.Style.PointColor = symBrush; @@ -114,7 +114,7 @@ private void optSpatial_Click(object sender, EventArgs e) var labelLyr = new SharpMap.Layers.LabelLayer("Labels") { DataSource = spatialLyr.DataSource, - //SRID=4326, + SRID= spatialLyr.DataSource.SRID, TargetSRID = 3857, Enabled = true, LabelColumn = "Name", diff --git a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs index 01630ae2..819c52a4 100644 --- a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs +++ b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs @@ -10,7 +10,7 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. - + // You should have received a copy of the GNU Lesser General Public License // along with SharpMap; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -71,12 +71,17 @@ public override Collection GetGeometriesInView(BoundingBox bbox) //Get bounding box string string strBbox = GetBoxFilterStr(bbox); - string strSql = "SELECT g." + GeometryColumn; + string strSql = "SELECT g." + GeometryColumn + GetMakeValidString(); strSql += " FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + strSql += strBbox; string extraOptions = GetExtraOptions(); @@ -92,7 +97,7 @@ public override Collection GetGeometriesInView(BoundingBox bbox) { if (dr[0] != null && dr[0] != DBNull.Value) { - Geometry geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry) dr[0]); + Geometry geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)dr[0]); if (geom != null) features.Add(geom); } @@ -151,6 +156,11 @@ protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + strSql += strGeom; string extraOptions = GetExtraOptions(); @@ -251,6 +261,11 @@ public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet d if (!String.IsNullOrEmpty(DefinitionQuery)) strSql += DefinitionQuery + " AND "; + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + strSql += strBbox; string extraOptions = GetExtraOptions(); @@ -280,7 +295,7 @@ public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet d var geom = dr[GeometryColumn]; Geometry sqlGeometry = null; if (geom != null && geom != DBNull.Value) - sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry) geom); + sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)geom); fdr.Geometry = sqlGeometry; fdt.AddRow(fdr); } @@ -291,4 +306,4 @@ public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet d } } -} \ No newline at end of file +} diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index e795f48e..6fcb09c4 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -26,6 +26,9 @@ // // Alternatively, to work with native Sql Spatial types, see SharpMap.SqlServerSpatialObjects which requests // raw spatial bytes from the database and uses Microsoft.SqlServer.Types to convert Sql bytes on the client. +// +// By default, the provider ignores invalid spatial objects. This behaviour can be changed by setting +// SqlServer2008.ValidateGeometries = True BUT take note of comments on this property. using System; using System.Collections.ObjectModel; @@ -149,12 +152,14 @@ public class SqlServer2008 : BaseProvider public SqlServerSpatialObjectType SpatialObjectType { get; private set; } /// - /// Gets/Sets whether all passed to and retreieved from SqlServer should be made valid using this function. + /// When true, attempts to repair invalid SqlServer spatial objects by appending .MakeValid() in SQL statements. + /// Ignored for .Geomtry + /// when or is enabled due to SQL Server query execution plan. /// public Boolean ValidateGeometries { get; set; } /// - /// When true, uses the FORCESEEK table hint. + /// When true, uses the FORCESEEK table hint, possibly over-riding . /// public bool ForceSeekHint { get; set; } @@ -164,7 +169,7 @@ public class SqlServer2008 : BaseProvider public bool NoLockHint { get; set; } /// - /// When set, forces use of the specified index + /// When set, forces use of the specified index, possibly over-riding . /// public string ForceIndex { get; set; } @@ -477,7 +482,9 @@ public override Collection GetGeometriesInView(Envelope bbox) if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append($"{DefinitionQuery} AND "); - if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries ) + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); @@ -552,7 +559,9 @@ public override Collection GetObjectIDsInView(Envelope bbox) if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append(DefinitionQuery + " AND "); - if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries) + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); @@ -618,6 +627,11 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() As {SharpMapWkb} " + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append($"{DefinitionQuery} AND "); @@ -629,7 +643,7 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe } /// - /// Returns the number of features in the dataset + /// Returns the number of records in the dataset (including NULL, EMPTY, and Invalid geometries) /// /// number of features public override int GetFeatureCount() @@ -752,21 +766,22 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.QueryIndividualFeatures: + // MUST call MakeValid regardless of ValidateGeometries if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) - // GEOMETRY returns 1 row for each feature. MUST call MakeValid() here + // GEOMETRY returns 1 row for each feature sql = $"SELECT {GeometryColumn}.MakeValid().STEnvelope().STAsBinary() FROM {QualifiedTable}"; else - // GEOGRAPHY returns single row with multi-geometry containing all features. MUST call MakeValid() here + // GEOGRAPHY returns single row with multi-geometry containing all features sql = $"SELECT {_spatialTypeString}::CollectionAggregate({GeometryColumn}.MakeValid()).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) sql += $" WHERE {DefinitionQuery}"; - if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + if (!ValidateGeometries) { + // explicitly exclude any Invalid geoms sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; - // MUST explicitly exlude NULLS for EnvelopeAggregate - sql += $"{GeometryColumn} IS NOT NULL"; + sql += $"{GeometryColumn}.STIsValid()=1"; } if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); @@ -791,21 +806,22 @@ public override Envelope GetExtents() case SqlServer2008ExtentsMode.EnvelopeAggregate: if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) - // GEOMETRY EnvelopeAggregate returns RECTILINEAR polygon . Note that {GetMakeValidString()} cannot be used with EnvelopeAggregate - sql = $"SELECT {_spatialTypeString}::EnvelopeAggregate({GeometryColumn}).STAsBinary() FROM {QualifiedTable}"; + // GEOMETRY EnvelopeAggregate returns RECTILINEAR polygon. + sql = $"SELECT {_spatialTypeString}::EnvelopeAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; else // GEOGRAPHY EnvelopeAggregate returns CURVED polygon (not supported by SharpMap), // so use ConvextHullAggregate to return POLYGON and FORCE .MakeValid - sql = $"SELECT {_spatialTypeString}::ConvexHullAggregate({GeometryColumn}.MakeValid()).STAsBinary() FROM {QualifiedTable}"; + sql = $"SELECT {_spatialTypeString}::ConvexHullAggregate({GeometryColumn}{GetMakeValidString()}).STAsBinary() FROM {QualifiedTable}"; if (!String.IsNullOrEmpty(DefinitionQuery)) sql += $" WHERE {DefinitionQuery}"; - if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + // Note Geometry limitiation - ALWAYS have to filter Invalid geometries (otherwise EnvelopeAggregate will return NULL) + if (!ValidateGeometries || SpatialObjectType == SqlServerSpatialObjectType.Geometry) { + // explicitly exclude any Invalid geoms sql += String.IsNullOrEmpty(DefinitionQuery) ? " WHERE " : " AND "; - // MUST explicitly exlude NULLS / Invalids PRIOR to EnvelopeAggregate - sql += $"{GeometryColumn} IS NOT NULL AND {GeometryColumn}.STIsValid()=1"; + sql += $"{GeometryColumn}.STIsValid()=1"; } if (_logger.IsDebugEnabled) _logger.DebugFormat("GetExtents {0} {1}", ExtentsMode, sql); @@ -847,7 +863,9 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet fds) if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append($"{DefinitionQuery} AND "); - if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !ValidateGeometries) + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index 235e3602..d6f81605 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -37,12 +37,19 @@ public void VerifySchemaDetection(string schemaTable, string tableSchema, string } [NUnit.Framework.TestFixture] - [Ignore("Requires SqlServerSpatial")] + //[Ignore("Requires SqlServerSpatial")] public class SQLServer2008DbTests { + private const int GeographySrid = 4326; + private int _geometrySrid = 0; // private const string GeometrySpatialIndex = "IX_roads_ugl_GEOM"; private const string GeographySpatialIndex = "IX_roads_ugl_GEOG"; + private int _numValidGeoms; // number of valid spatial features + private int _numInvalidGeoms; // number of invalid spatial features + private int _numValidatedGeoms; // number of spatial featuress = _numValidGeoms + Validated(_numInvalidGeoms) + private int _numFeatures; // number of records + private string GetTestFile() { return Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); @@ -84,9 +91,12 @@ public void SetupFixture() using (SharpMap.Data.Providers.ShapeFile shapeFile = new SharpMap.Data.Providers.ShapeFile(GetTestFile())) { shapeFile.Open(); + _geometrySrid = shapeFile.SRID; IEnumerable indexes = shapeFile.GetObjectIDsInView(shapeFile.GetExtents()); + // Note that spatial indexes may only kick in at certain number of records + // so for thorough testing comment out next line and load all features (approx 3500) indexes = indexes.Take(100); var cmdGeom = new SqlCommand("INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))", conn); @@ -107,7 +117,7 @@ public void SetupFixture() { cmdGeom.Parameters.AddWithValue("@Geom", wkt); cmdGeom.Parameters.AddWithValue("@Name", feature["NAME"]); - cmdGeom.Parameters.AddWithValue("@Srid", shapeFile.SRID); + cmdGeom.Parameters.AddWithValue("@Srid", _geometrySrid); } else { @@ -120,7 +130,7 @@ public void SetupFixture() { cmdGeog.Parameters.AddWithValue("@Geog", wkt); cmdGeog.Parameters.AddWithValue("@Name", feature["NAME"]); - cmdGeog.Parameters.AddWithValue("@Srid", 4326); + cmdGeog.Parameters.AddWithValue("@Srid", GeographySrid); } else { @@ -155,10 +165,10 @@ public void SetupFixture() cmd.ExecuteNonQuery(); // INVALID (ID 144 from shape file; see also ID 2055) - cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test invalid wkt', geometry::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', 4326))"; + cmd.CommandText = $"INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test invalid wkt', geometry::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {_geometrySrid}))"; cmd.ExecuteNonQuery(); - cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test invalid wkt', geography::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', 4326))"; + cmd.CommandText = $"INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test invalid wkt', geography::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {GeographySrid}))"; cmd.ExecuteNonQuery(); } @@ -176,7 +186,24 @@ public void SetupFixture() cmd.CommandText = $"CREATE SPATIAL INDEX [{GeographySpatialIndex}] ON [dbo].[roads_ugl_geog](GEOG)"; cmd.CommandTimeout = 300; cmd.ExecuteNonQuery(); + + } + + // initialise counts + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 1"; + _numValidGeoms = (int)cmd.ExecuteScalar(); + + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE GEOM IS NOT NULL AND Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 0"; + _numInvalidGeoms = (int)cmd.ExecuteScalar(); + + _numValidatedGeoms = _numValidGeoms + _numInvalidGeoms; + + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom"; + _numFeatures = (int)cmd.ExecuteScalar(); } + } } @@ -210,7 +237,7 @@ private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialOb case SqlServerSpatialObjectType.Geography: // NB note forcing WGS84 return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geog", "GEOG", "ID", spatialType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures) + "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures) { //ValidateGeometries = true //, @@ -235,9 +262,13 @@ private SharpMap.Data.Providers.SqlServer2008Ex GetTestProviderEx() /// /// Get the envelope of the entire roads_ugl file /// - private GeoAPI.Geometries.Envelope GetTestEnvelope() + private GeoAPI.Geometries.Envelope GetTestEnvelope(SqlServerSpatialObjectType spatialType) { - return SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse("POLYGON ((-97.23724071609665 41.698023105763589, -82.424263624596563 41.698023105763589, -82.424263624596563 49.000629000758515, -97.23724071609665 49.000629000758515, -97.23724071609665 41.698023105763589))").EnvelopeInternal; + var env = SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse("POLYGON ((-97.23724071609665 41.698023105763589, -82.424263624596563 41.698023105763589, -82.424263624596563 49.000629000758515, -97.23724071609665 49.000629000758515, -97.23724071609665 41.698023105763589))").EnvelopeInternal; + if (spatialType == SqlServerSpatialObjectType.Geography) + // Geography works with boundaries on the spheroid (not rectilinear), so enlarge to ensure we get all features + env.ExpandBy(0.2); + return env; } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -300,21 +331,20 @@ public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialTy Assert.IsNotNull(extents); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + sq.ValidateGeometries = validateGeometries; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - if (spatialType == SqlServerSpatialObjectType.Geography) - Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, geometries.Count); - else - Assert.AreEqual(100, geometries.Count); - + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -325,52 +355,63 @@ public void TestGetGeometriesInViewDefinitionQuery(SqlServerSpatialObjectType sp sq.DefinitionQuery = "NAME LIKE 'A%'"; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - Assert.LessOrEqual(geometries.Count, 100); + Assert.LessOrEqual(geometries.Count, _numValidGeoms); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] + public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); - Assert.IsNotNull(geometries); - if (spatialType == SqlServerSpatialObjectType.Geography) - Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, geometries.Count); - else - Assert.AreEqual(100, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] + public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.ForceSeekHint = true; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + // NOTE ValidateGeometries is ignored when using ForceSeek + Assert.AreEqual(_numValidGeoms, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex)] - public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatialType, string indexName) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] + public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.ForceIndex = indexName; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + // NOTE ValidateGeometries is ignored when using ForceIndex + Assert.AreEqual(_numValidGeoms, geometries.Count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] @@ -386,16 +427,18 @@ public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialTy sq.ForceIndex = indexName; sq.ValidateGeometries = validateGeoms; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + // Note: ValidateGeometries is ignored when using ForceSeek or ForceIndex + Assert.AreEqual(_numValidGeoms, geometries.Count); } - [NUnit.Framework.Test()] - //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInViewEx() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] + //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] + //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewEx(SqlServerSpatialObjectType spatialType, bool validateGeometries) { // Note: // This test may fail with an InvalidCastException. This is caused by multiple versions of the @@ -404,11 +447,12 @@ public void TestGetGeometriesInViewEx() // http://connect.microsoft.com/SQLServer/feedback/details/685654/invalidcastexception-retrieving-sqlgeography-column-in-ado-net-data-reader SharpMap.Data.Providers.SqlServer2008 sq = GetTestProviderEx(); + sq.ValidateGeometries = validateGeometries; - var geometries = sq.GetGeometriesInView(GetTestEnvelope()); + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); - Assert.AreEqual(100, geometries.Count); + Assert.AreEqual(validateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); } [NUnit.Framework.Test()] @@ -422,7 +466,7 @@ public void TestPerformanceSqlServer2008ExProvider() SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerSpatialObjectType.Geometry); SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProviderEx(); - GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(); + GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(SqlServerSpatialObjectType.Geometry); List measurements = new List(200); List measurementsex = new List(200); System.Diagnostics.Stopwatch timer; @@ -453,56 +497,55 @@ public void TestPerformanceSqlServer2008ExProvider() Assert.Less(avgex, avg); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] + public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + sq.ValidateGeometries = validateGeometries; - var objectIds = sq.GetObjectIDsInView(GetTestEnvelope()); + var objectIds = sq.GetObjectIDsInView(GetTestEnvelope(spatialType)); - Assert.IsNotNull(objectIds); - if (spatialType == SqlServerSpatialObjectType.Geography) - Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, objectIds.Count); - else - Assert.AreEqual(100, objectIds.Count); + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, objectIds.Count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] - public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType, bool validateGeoms) + public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - sq.ValidateGeometries = validateGeoms; + sq.ValidateGeometries = validateGeometries; SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); - sq.ExecuteIntersectionQuery(GetTestEnvelope(), ds); + sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); - if (spatialType == SqlServerSpatialObjectType.Geography) - Assert.AreEqual(sq.ValidateGeometries ? 101 : 100, ds.Tables[0].Rows.Count); - else - Assert.AreEqual(100, ds.Tables[0].Rows.Count); + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex)] - public void TestExecuteIntersectionQueryAllHints(SqlServerSpatialObjectType spatialType, string indexName) + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] + public void TestExecuteIntersectionQueryAllHints(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) { SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; sq.ForceIndex = indexName; + sq.ValidateGeometries = validateGeometries; SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); - sq.ExecuteIntersectionQuery(GetTestEnvelope(), ds); - - Assert.AreEqual(100, ds.Tables[0].Rows.Count); + sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); + // Note: ValidateGeometries ignored when using ForceSeek or ForceIndex + Assert.AreEqual(_numValidGeoms, ds.Tables[0].Rows.Count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -513,8 +556,8 @@ public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) int count = sq.GetFeatureCount(); - // 100 valid + 3 invalid - Assert.AreEqual(103, count); + // includes NULL, EMPTY, and INVALID geoms + Assert.AreEqual(_numFeatures, count); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] @@ -527,7 +570,7 @@ public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType sp int count = sq.GetFeatureCount(); - Assert.LessOrEqual(count, 100); + Assert.LessOrEqual(count, _numValidGeoms); } [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] From a25856f8e91d700bbe0c5f84c19aee33038778a9 Mon Sep 17 00:00:00 2001 From: Tim C Date: Fri, 30 Nov 2018 11:28:43 +0700 Subject: [PATCH 084/186] Updates in preparation for adding support for SqlGeography to SharpMap.SqlServerSpatialObjects --- SharpMap/Data/Providers/SqlServer2008.cs | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 6fcb09c4..970d4b64 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -103,15 +103,15 @@ public class SqlServer2008 : BaseProvider private const string SharpMapWkb = "sharpmapwkb"; // required for restricting extents of WKT (eg bbox) used to query SqlGeography - private static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 179.999999999, -89.999999999, 89.999999999); + protected static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 179.999999999, -89.999999999, 89.999999999); // SqlGeography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) // SqlGeometry : orientation is irrelevant // GeometryToWKT returns Envelope with clockwise ring, so need to call .ReorientObject() for WKT used to query SqlGeography - private readonly string _reorientObject; + protected readonly string _reorientObject; // used for static spatial methods in SQL string - private readonly string _spatialTypeString; + protected readonly string _spatialTypeString; private SqlServer2008ExtentsMode _extentsMode; @@ -156,7 +156,7 @@ public class SqlServer2008 : BaseProvider /// Ignored for .Geomtry /// when or is enabled due to SQL Server query execution plan. /// - public Boolean ValidateGeometries { get; set; } + public virtual Boolean ValidateGeometries { get; set; } /// /// When true, uses the FORCESEEK table hint, possibly over-riding . @@ -400,7 +400,7 @@ protected void ParseTablename(string tablename) Table = sb.ToString(); } - private string GetAttributeColumnNames() + protected string GetAttributeColumnNames() { if (string.IsNullOrEmpty(_attributeColumnNames)) { @@ -523,7 +523,7 @@ public override IGeometry GetGeometryByID(uint oid) using (var conn = new SqlConnection(ConnectionString)) { string strSql = $"SELECT {GeometryColumn}{GetMakeValidString()}.STAsBinary() FROM {QualifiedTable} " + - $"WHERE {ObjectIdColumn}={oid}"; + $"WHERE {ObjectIdColumn} = {oid}"; if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); @@ -635,7 +635,11 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe if (!String.IsNullOrEmpty(DefinitionQuery)) sb.Append($"{DefinitionQuery} AND "); - sb.Append($"{GeometryColumn}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); + // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: + // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. + var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" + + sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); @@ -714,8 +718,11 @@ public override FeatureDataRow GetFeature(uint rowId) if (col.ColumnName != GeometryColumn && col.ColumnName != SharpMapWkb) fdr[col.ColumnName] = dr[col]; - var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); - fdr.Geometry = wkbReader.Read((byte[])dr[SharpMapWkb]); + if (dr[SharpMapWkb] != null && dr[SharpMapWkb] != DBNull.Value) + { + var wkbReader = new NetTopologySuite.IO.WKBReader(GeometryServiceProvider.Instance); + fdr.Geometry = wkbReader.Read((byte[])dr[SharpMapWkb]); + } return fdr; } @@ -877,7 +884,7 @@ public override void ExecuteIntersectionQuery(Envelope bbox, FeatureDataSet fds) #endregion - private void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) + protected virtual void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) { using (var conn = new SqlConnection(ConnectionString)) { From 9b400122265159fe9c98ca33cf14dcac735c5765 Mon Sep 17 00:00:00 2001 From: Tim C Date: Tue, 9 Apr 2019 13:50:09 +0700 Subject: [PATCH 085/186] Add SqlGeography support to SharpMap.SqlServerSpatialObjects (#126) * Expose private properties to inherited classes * Add class SqlGeographyConverter.cs * Add NuGet packages for Common.Logging * Update readme * Fix polygon ring orientation and SQL query syntax * Update UnitTests for SqlServer2008Ex provider * Update Examples\WinformSamples for SqlServer providers * Change to SqlConnString and drop LocalDb mdf and ldf files * Add comprehensive data provider tests * Enable NativeTypes for SqlServer WinForms sample * Resolve SqlGeography antipodal points error when exceeding geog extents --- .../Samples/FormSqlServerOpts.Designer.cs | 1 - .../Samples/FormSqlServerOpts.cs | 24 +- .../SqlGeographyConverter.cs | 368 ++++++++++++++++++ .../SqlGeometryConverter.cs | 10 +- .../Data/Providers/SqlServer2008Ex.cs | 252 ++++++------ .../Geometries/SpatialOperationsEx.cs | 163 ++++++-- .../Geometries/SpatialRelationsEx.cs | 248 ++++++++++-- SharpMap.SqlServerSpatialObjects/ReadMe.txt | 22 +- .../SharpMap.SqlServerSpatialObjects.csproj | 7 + .../packages.config | 2 + SharpMap/Data/Providers/SqlServer2008.cs | 34 +- UnitTests/Converters/SqlServer2008.cs | 122 ++++-- .../Data/Providers/SQLServer2008Tests.cs | 363 +++++++++++------ UnitTests/Serialization/ProviderTest.cs | 22 ++ 14 files changed, 1305 insertions(+), 333 deletions(-) create mode 100644 SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs index 7f8bc694..96b71dfd 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.Designer.cs @@ -284,7 +284,6 @@ private void InitializeComponent() // optDataProviderNative // this.optDataProviderNative.AutoSize = true; - this.optDataProviderNative.Enabled = false; this.optDataProviderNative.Location = new System.Drawing.Point(19, 42); this.optDataProviderNative.Name = "optDataProviderNative"; this.optDataProviderNative.Size = new System.Drawing.Size(340, 17); diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs index 3796235a..a8c4e6dc 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs @@ -65,6 +65,10 @@ private void WireHandlers() private void optDataProvider_Click(object sender, EventArgs e) { + if (optDataProviderNative.Checked && !chkSpatialValidate.Checked) + // MUST be true for Native Types + chkSpatialValidate.Checked = true; + optSpatial_Click(null, null); } @@ -82,10 +86,10 @@ private void optSpatial_Click(object sender, EventArgs e) if (optSpatialGeog.Checked) { - spatialTable =SqlServerSample.GeogTable; + spatialTable = SqlServerSample.GeogTable; geomColumn = "Geog4326"; geomType = SqlServerSpatialObjectType.Geography; - symBrush = new SolidBrush(optDataProviderWKB.Checked? Color.Orange : Color.DeepSkyBlue); + symBrush = new SolidBrush(optDataProviderWKB.Checked ? Color.Orange : Color.DeepSkyBlue); labTable.Text = "Table: " + SqlServerSample.GeogTable; } else @@ -95,15 +99,17 @@ private void optSpatial_Click(object sender, EventArgs e) spatialTable = SqlServerSample.GeomTable; geomColumn = "Geom4326"; geomType = SqlServerSpatialObjectType.Geometry; - symBrush = new SolidBrush(optDataProviderWKB.Checked ? Color.Red : Color.DodgerBlue ); + symBrush = new SolidBrush(optDataProviderWKB.Checked ? Color.Red : Color.DodgerBlue); labTable.Text = "Table: " + SqlServerSample.GeomTable; + + chkSpatialValidate.Enabled = true; } spatialLyr = new SharpMap.Layers.VectorLayer("Spatial"); if (optDataProviderWKB.Checked) spatialLyr.DataSource = new SqlServer2008(ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); else - //spatialLyr.DataSource = new SqlServer2008Ex (ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); + spatialLyr.DataSource = new SqlServer2008Ex(ConnectionString, spatialTable, geomColumn, "Id", geomType, 4326, SqlServer2008ExtentsMode.QueryIndividualFeatures); spatialLyr.SRID = spatialLyr.DataSource.SRID; spatialLyr.TargetSRID = 3857; @@ -114,7 +120,7 @@ private void optSpatial_Click(object sender, EventArgs e) var labelLyr = new SharpMap.Layers.LabelLayer("Labels") { DataSource = spatialLyr.DataSource, - SRID= spatialLyr.DataSource.SRID, + //SRID=4326, TargetSRID = 3857, Enabled = true, LabelColumn = "Name", @@ -160,6 +166,14 @@ private void chkSpatialValidate_Click(object sender, EventArgs e) var sqlDP = GetSqlServerDataProvider(); if (sqlDP == null) return; + if (sqlDP is SqlServer2008Ex) + if (sender != null && !chkSpatialValidate.Checked) + { + chkSpatialValidate.Checked = true; + MessageBox.Show("Validate is cannot be disabled for Native Types", + "Validate Geometries", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + sqlDP.ValidateGeometries = chkSpatialValidate.Checked; if (sender != null) diff --git a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs new file mode 100644 index 00000000..f2de39a0 --- /dev/null +++ b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs @@ -0,0 +1,368 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Runtime.Serialization; +using GeoAPI.Geometries; +using Microsoft.SqlServer.Types; +using SMGeometry = GeoAPI.Geometries.IGeometry; +using SMGeometryType = GeoAPI.Geometries.OgcGeometryType; +using SMPoint = GeoAPI.Geometries.IPoint; +using SMLineString = GeoAPI.Geometries.ILineString; +using SMLinearRing = GeoAPI.Geometries.ILinearRing; +using SMPolygon = GeoAPI.Geometries.IPolygon; +using SMMultiPoint = GeoAPI.Geometries.IMultiPoint; +using SMMultiLineString = GeoAPI.Geometries.IMultiLineString; +using SMMultiPolygon = GeoAPI.Geometries.IMultiPolygon; +using SMGeometryCollection = GeoAPI.Geometries.IGeometryCollection; +using Factory = GeoAPI.Geometries.IGeometryFactory; + +namespace SharpMap.Converters.SqlServer2008SpatialObjects +{ + [Serializable] + public class SqlGeographyConverterException : Exception + { + /// + /// The geometry to convert + /// + public readonly SMGeometry Geometry; + + public SqlGeographyConverterException() + { } + + public SqlGeographyConverterException(SMGeometry geometry) + : this("Failed to convert SharpMapGeometry", geometry) + { + Geometry = geometry; + } + + public SqlGeographyConverterException(Exception inner, SMGeometry geometry) + : this("Failed to convert SharpMapGeometry", inner, geometry) + { + } + + public SqlGeographyConverterException(string message, SMGeometry geometry) + : base(message) + { + Geometry = geometry; + } + + public SqlGeographyConverterException(string message, Exception inner, SMGeometry geometry) + : base(message, inner) + { + Geometry = geometry; + } + + protected SqlGeographyConverterException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + //Geometry = (SMGeometry) info.GetValue("geom", typeof (SMGeometry)); + } + + } + public static class SqlGeographyConverter + { + private static readonly GeoAPI.IGeometryServices Services = GeoAPI.GeometryServiceProvider.Instance; + + // For GEOGRAPHY: tolerance is measured in the units defined by the unit_of_measure column of the + // sys.spatial_reference_systems table corresponding to the SRID in which the instance is defined + public static double ReduceTolerance = 1d; + + public static SqlGeography ToSqlGeography(SMGeometry smGeometry) + { + SqlGeographyBuilder builder = new SqlGeographyBuilder(); + builder.SetSrid(smGeometry.SRID); + + SharpMapGeometryToSqlGeography(builder, smGeometry); + + SqlGeography g = builder.ConstructedGeography; + if (!g.STIsValid()) + { + try + { + g = g.Reduce(ReduceTolerance); + g = g.MakeValid(); + } + catch (Exception ex) + { + throw new SqlGeographyConverterException(ex, smGeometry); + } + } + + if (!g.STIsValid()) + throw new SqlGeographyConverterException(smGeometry); + + return g; + + } + + public static IEnumerable ToSqlGeographies(IEnumerable smGeometries) + { + foreach (SMGeometry smGeometry in smGeometries) + yield return ToSqlGeography(smGeometry); + } + + private static void SharpMapGeometryToSqlGeography(SqlGeographyBuilder geogBuilder, SMGeometry smGeometry) + { + + switch (smGeometry.OgcGeometryType) + { + case SMGeometryType.Point: + SharpMapPointToSqlGeography(geogBuilder, smGeometry as SMPoint); + break; + case SMGeometryType.LineString: + SharpMapLineStringToSqlGeography(geogBuilder, smGeometry as SMLineString); + break; + case SMGeometryType.Polygon: + SharpMapPolygonToSqlGeography(geogBuilder, smGeometry as SMPolygon); + break; + case SMGeometryType.MultiPoint: + SharpMapMultiPointToSqlGeography(geogBuilder, smGeometry as SMMultiPoint); + break; + case SMGeometryType.MultiLineString: + SharpMapMultiLineStringToSqlGeography(geogBuilder, smGeometry as SMMultiLineString); + break; + case SMGeometryType.MultiPolygon: + SharpMapMultiPolygonToSqlGeography(geogBuilder, smGeometry as SMMultiPolygon); + break; + case SMGeometryType.GeometryCollection: + SharpMapGeometryCollectionToSqlGeography(geogBuilder, smGeometry as SMGeometryCollection); + break; + default: + throw new ArgumentException( + String.Format("Cannot convert '{0}' geography type", smGeometry.GeometryType), "smGeometry"); + } + } + + private static void SharpMapGeometryCollectionToSqlGeography(SqlGeographyBuilder geogBuilder, SMGeometryCollection geometryCollection) + { + geogBuilder.BeginGeography(OpenGisGeographyType.GeometryCollection); + for (int i = 0; i < geometryCollection.NumGeometries; i++) + SharpMapGeometryToSqlGeography(geogBuilder, geometryCollection[i]); + geogBuilder.EndGeography(); + } + + private static void SharpMapMultiPolygonToSqlGeography(SqlGeographyBuilder geogBuilder, SMMultiPolygon multiPolygon) + { + geogBuilder.BeginGeography(OpenGisGeographyType.MultiPolygon); + for (int i = 0; i < multiPolygon.NumGeometries; i++) + SharpMapPolygonToSqlGeography(geogBuilder, multiPolygon[i] as SMPolygon); + geogBuilder.EndGeography(); + } + + private static void SharpMapMultiLineStringToSqlGeography(SqlGeographyBuilder geogBuilder, SMMultiLineString multiLineString) + { + geogBuilder.BeginGeography(OpenGisGeographyType.MultiLineString); + for (int i = 0; i < multiLineString.NumGeometries; i++) + SharpMapLineStringToSqlGeography(geogBuilder, multiLineString[i] as SMLineString); + geogBuilder.EndGeography(); + } + + private static void SharpMapMultiPointToSqlGeography(SqlGeographyBuilder geogBuilder, SMMultiPoint multiPoint) + { + geogBuilder.BeginGeography(OpenGisGeographyType.MultiPoint); + for (int i = 0; i < multiPoint.NumPoints; i++) + SharpMapPointToSqlGeography(geogBuilder, multiPoint[i] as SMPoint); + geogBuilder.EndGeography(); + } + + private static void SharpMapPointToSqlGeography(SqlGeographyBuilder geogBuilder, SMPoint point) + { + geogBuilder.BeginGeography(OpenGisGeographyType.Point); + geogBuilder.BeginFigure(point.Y, point.X); + geogBuilder.EndFigure(); + geogBuilder.EndGeography(); + } + + private static void SharpMapLineStringToSqlGeography(SqlGeographyBuilder geomBuilder, SMLineString lineString) + { + geomBuilder.BeginGeography(OpenGisGeographyType.LineString); + var coords = lineString.Coordinates; + geomBuilder.BeginFigure(coords[0].Y, coords[0].X); + for (int i = 1; i < lineString.NumPoints; i++) + { + var point = coords[i]; + geomBuilder.AddLine(point.Y, point.X); + } + geomBuilder.EndFigure(); + geomBuilder.EndGeography(); + } + + private static void SharpMapPolygonToSqlGeography(SqlGeographyBuilder geogBuilder, SMPolygon polygon) + { + geogBuilder.BeginGeography(OpenGisGeographyType.Polygon); + //Note: Reverse Exterior ring orientation + AddRing(geogBuilder, (SMLinearRing)polygon.ExteriorRing.Reverse()); + for (int i = 0; i < polygon.NumInteriorRings; i++) + AddRing(geogBuilder, (SMLinearRing)polygon.GetInteriorRingN(i)); + geogBuilder.EndGeography(); + } + + private static void AddRing(SqlGeographyBuilder builder, SMLinearRing linearRing) + { + if (linearRing.NumPoints < 3) + return; + + //if (linearRing.Area == 0) + // return; + + var coords = linearRing.Coordinates; + builder.BeginFigure(coords[0].Y, coords[0].X); + for (var i = 1; i < linearRing.NumPoints; i++) + { + var pt = coords[i]; + builder.AddLine(pt.Y, pt.X); + } + builder.EndFigure(); + } + + public static SMGeometry ToSharpMapGeometry(SqlGeography geography) + { + return ToSharpMapGeometry(geography, null); + } + public static SMGeometry ToSharpMapGeometry(SqlGeography geography, Factory factory) + { + if (geography == null) return null; + if (geography.IsNull) return null; + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + + if (geography.STIsEmpty()) + return fact.CreateGeometryCollection(null); + + if (!geography.STIsValid()) + geography = geography.MakeValid(); + + OpenGisGeometryType geometryType = (OpenGisGeometryType)Enum.Parse(typeof(OpenGisGeometryType), (string)geography.STGeometryType()); + switch (geometryType) + { + case OpenGisGeometryType.Point: + return SqlGeographyToSharpMapPoint(geography, fact); + case OpenGisGeometryType.LineString: + return SqlGeographyToSharpMapLineString(geography, fact); + case OpenGisGeometryType.Polygon: + return SqlGeographyToSharpMapPolygon(geography, fact); + case OpenGisGeometryType.MultiPoint: + return SqlGeographyToSharpMapMultiPoint(geography, fact); + case OpenGisGeometryType.MultiLineString: + return SqlGeographyToSharpMapMultiLineString(geography, fact); + case OpenGisGeometryType.MultiPolygon: + return SqlGeographyToSharpMapMultiPolygon(geography, fact); + case OpenGisGeometryType.GeometryCollection: + return SqlGeographyToSharpMapGeometryCollection(geography, fact); + } + throw new ArgumentException(string.Format("Cannot convert SqlServer '{0}' to Sharpmap.Geometry", geography.STGeometryType()), "geography"); + } + + public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeographies) + { + return ToSharpMapGeometries(sqlGeographies, null); + } + + public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeographies, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)sqlGeographies.First().STSrid); + + foreach (var sqlGeography in sqlGeographies) + yield return ToSharpMapGeometry(sqlGeography, fact); + } + + /* + private static OpenGisGeometryType ParseGeometryType(string stGeometryType) + { + switch (stGeometryType.ToUpper()) + { + case "POINT": + return OpenGisGeometryType.Point; + case "LINESTRING": + return OpenGisGeometryType.LineString; + case "POLYGON": + return OpenGisGeometryType.Polygon; + case "MULTIPOINT": + return OpenGisGeometryType.MultiPoint; + case "MULTILINESTRING": + return OpenGisGeometryType.MultiLineString; + case "MULTIPOLYGON": + return OpenGisGeometryType.MultiPolygon; + case "GEOMETRYCOLLECTION": + return OpenGisGeometryType.GeometryCollection; + } + throw new ArgumentException(String.Format("Invalid geometrytype '{0}'!", stGeometryType), "stGeometryType"); + } + */ + + private static SMGeometryCollection SqlGeographyToSharpMapGeometryCollection(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + var geoms = new SMGeometry[(int)geography.STNumGeometries()]; + for (var i = 1; i <= geography.STNumGeometries(); i++) + geoms[i - 1] = ToSharpMapGeometry(geography.STGeometryN(i), fact); + return fact.CreateGeometryCollection(geoms); + } + + private static SMMultiPolygon SqlGeographyToSharpMapMultiPolygon(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + var polygons = new SMPolygon[(int)geography.STNumGeometries()]; + for (var i = 1; i <= geography.STNumGeometries(); i++) + polygons[i - 1] = (SMPolygon)SqlGeographyToSharpMapPolygon(geography.STGeometryN(i), fact); + return fact.CreateMultiPolygon(polygons); + } + + private static SMMultiLineString SqlGeographyToSharpMapMultiLineString(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + var lineStrings = new SMLineString[(int)geography.STNumGeometries()]; + for (var i = 1; i <= geography.STNumGeometries(); i++) + lineStrings[i - 1] = (SMLineString)SqlGeographyToSharpMapLineString(geography.STGeometryN(i), fact); + return fact.CreateMultiLineString(lineStrings); + } + + private static SMGeometry SqlGeographyToSharpMapMultiPoint(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + var points = new SMPoint[(int)geography.STNumGeometries()]; + for (var i = 1; i <= geography.STNumGeometries(); i++) + points[i - 1] = (SMPoint)SqlGeographyToSharpMapPoint(geography.STGeometryN(i), fact); + return fact.CreateMultiPoint(points); + } + + private static SMGeometry SqlGeographyToSharpMapPoint(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + return fact.CreatePoint(new Coordinate((double)geography.Long, (double)geography.Lat)); + } + + private static Coordinate[] GetPoints(SqlGeography geography) + { + var pts = new Coordinate[(int)geography.STNumPoints()]; + for (int i = 1; i <= (int)geography.STNumPoints(); i++) + { + var ptGeometry = geography.STPointN(i); + pts[i - 1] = new Coordinate((double)ptGeometry.Long, (double)ptGeometry.Lat); + } + return pts; + } + + private static SMGeometry SqlGeographyToSharpMapLineString(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + return fact.CreateLineString(GetPoints(geography)); + } + + private static SMGeometry SqlGeographyToSharpMapPolygon(SqlGeography geography, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geography.STSrid); + + // courtesy of NetTopologySuite.Io.SqlServerBytes + var rings = new List(); + for (var i = 1; i <= geography.NumRings(); i++) + rings.Add(fact.CreateLinearRing(GetPoints(geography.RingN(i)))); + + var shellCCW = rings.FirstOrDefault(r => r.IsCCW); + // NB: reverse exterio ring orientation + var shellCW = fact.CreateLinearRing(shellCCW.Reverse().Coordinates); + + return fact.CreatePolygon(shellCW, Enumerable.ToArray(rings.Where(r => r != shellCCW))); + } + + } +} diff --git a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs index 085b574a..dbafcb9d 100644 --- a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs +++ b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs @@ -97,8 +97,8 @@ public static SqlGeometry ToSqlGeometry(SMGeometry smGeometry) { try { - g.Reduce(ReduceTolerance); - g.MakeValid(); + g = g.Reduce(ReduceTolerance); + g = g.MakeValid(); } catch (Exception ex) { @@ -238,13 +238,15 @@ public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry) public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry, Factory factory) { if (geometry == null) return null; + if (geometry.IsNull) return null; + var fact = factory ?? Services.CreateGeometryFactory((int) geometry.STSrid); if (geometry.STIsEmpty()) return fact.CreateGeometryCollection(null); if (!geometry.STIsValid()) - geometry.MakeValid(); + geometry = geometry.MakeValid(); OpenGisGeometryType geometryType = (OpenGisGeometryType)Enum.Parse(typeof(OpenGisGeometryType), (string)geometry.STGeometryType()); switch (geometryType) @@ -378,4 +380,4 @@ private static SMGeometry SqlGeometryToSharpMapPolygon(SqlGeometry geometry, Fac return Services.CreateGeometryFactory((int)geometry.STSrid).CreatePolygon(exterior, interior); } } -} \ No newline at end of file +} diff --git a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs index 819c52a4..fe372fd0 100644 --- a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs +++ b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs @@ -15,11 +15,14 @@ // along with SharpMap; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +using Common.Logging; +using GeoAPI.Geometries; using SharpMap.Converters.SqlServer2008SpatialObjects; using System; using System.Collections.ObjectModel; using System.Data.SqlClient; using System.Globalization; +using System.Text; using BoundingBox = GeoAPI.Geometries.Envelope; using Geometry = GeoAPI.Geometries.IGeometry; @@ -31,7 +34,6 @@ namespace SharpMap.Data.Providers /// /// This is a modified version of the provider. It might provide better performance /// because it directly uses the SQL server spatial types, instead of using the STAsBinary method. - /// It currently does not support the geography sql server data type. /// /// Adding a datasource to a layer: /// @@ -44,19 +46,64 @@ namespace SharpMap.Data.Providers [Serializable] public class SqlServer2008Ex : SqlServer2008 { + static readonly ILog _logger = LogManager.GetLogger(typeof(SqlServer2008Ex)); + + /// + /// Always true. Both queries and client-side conversion will always attempt to repair invalid spatial objects + /// + public override bool ValidateGeometries + { + get => true; + set + { + if (value != true) + throw new ArgumentOutOfRangeException("SqlServer2008Ex converters ALWAYS attempt to repair invalid spatial objects"); + } + } + /// - /// Initializes a new connection to SQL Server + /// Initializes a new connection to SQL Server for .Geometry with default /// /// Connectionstring /// Name of data table /// Name of geometry column /// Name of column with unique identifier + [Obsolete] public SqlServer2008Ex(string connectionStr, string tablename, string geometryColumnName, string oidColumnName) - : base(connectionStr, tablename, geometryColumnName, oidColumnName) + : base(connectionStr, tablename, geometryColumnName, oidColumnName, SqlServerSpatialObjectType.Geometry) { } - private const string SpatialObject = "geometry"; + /// + /// Initializes a new connection to SQL Server with default + /// + /// Connectionstring + /// Name of data table + /// Name of spatial column + /// Name of column with unique identifier + /// spatial type (Geometry or Geography) + [Obsolete] + public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType) + : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType) + { + } + + /// + /// Initializes a new connection to SQL Server + /// + /// Connectionstring + /// Name of data table + /// Name of spatial column + /// Name of column with unique identifier + /// spatial type (Geometry or Geography) + /// Spatial Reference ID + /// method for reading data extents. Geography does not support SqlServer2008ExtentsMode::SpatialIndex + public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType, int srid, SqlServer2008ExtentsMode extentsMode) + : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, srid, extentsMode) + { + } /// /// Returns geometries within the specified bounding box @@ -68,27 +115,22 @@ public override Collection GetGeometriesInView(BoundingBox bbox) var features = new Collection(); using (var conn = new SqlConnection(ConnectionString)) { - //Get bounding box string - string strBbox = GetBoxFilterStr(bbox); - - string strSql = "SELECT g." + GeometryColumn + GetMakeValidString(); - strSql += " FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; + var sb = new StringBuilder($"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + sb.Append($"{DefinitionQuery} AND "); if (!ValidateGeometries || (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - strSql += strBbox; + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometriesInView {0}", sb.ToString()); - using (var command = new SqlCommand(strSql, conn)) + using (var command = new SqlCommand(sb.ToString(), conn)) { conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) @@ -97,13 +139,12 @@ public override Collection GetGeometriesInView(BoundingBox bbox) { if (dr[0] != null && dr[0] != DBNull.Value) { - Geometry geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)dr[0]); + var geom = SqlBytesToGeometry(dr[0]); if (geom != null) features.Add(geom); } } } - conn.Close(); } } return features; @@ -119,20 +160,23 @@ public override Geometry GetGeometryByID(uint oid) Geometry geom = null; using (var conn = new SqlConnection(ConnectionString)) { - string strSql = "SELECT g." + GeometryColumn + " FROM " + QualifiedTable + " g WHERE " + ObjectIdColumn + "='" + oid + "'"; - conn.Open(); + string strSql = $"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} WHERE {ObjectIdColumn} = {oid}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); + using (var command = new SqlCommand(strSql, conn)) { + conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) { while (dr.Read()) { if (dr[0] != null && dr[0] != DBNull.Value) - geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)dr[0]); + geom = SqlBytesToGeometry(dr[0]); } } } - conn.Close(); } return geom; } @@ -141,63 +185,43 @@ public override Geometry GetGeometryByID(uint oid) /// Returns the features that intersects with 'geom' /// /// - /// FeatureDataSet to fill data into - protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) + /// FeatureDataSet to fill data into + protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet fds) { - using (var conn = new SqlConnection(ConnectionString)) + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) { - string strGeom = SpatialObject + "::STGeomFromText('" + geom.AsText() + "', #SRID#)"; + // Define Ring with Clockwise orientation, to be reoriented in query + var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { + GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), + GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), + GeogMaxExtents.BottomLeft()}); + geom = geom.Intersection(maxExentsPoly); + } - strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(CultureInfo.InvariantCulture) : "0"); - strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1"; + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - string strSql = "SELECT g.* FROM " + QualifiedTable + " g " + BuildTableHints() + " WHERE "; + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); - if (!ValidateGeometries || - (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) - // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: + // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. + var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" - strSql += strGeom; + sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); - using (var adapter = new SqlDataAdapter(strSql, conn)) - { - conn.Open(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - foreach (System.Data.DataRow dr in ds.Tables[0].Rows) - { - FeatureDataRow fdr = fdt.NewRow(); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdr[col.ColumnName] = dr[col]; - - var ogeom = dr[GeometryColumn]; - Geometry sqlGeometry = null; - if (ogeom != null && ogeom != DBNull.Value) - sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)ogeom); - fdr.Geometry = sqlGeometry; - fdt.AddRow(fdr); - } - ds.Tables.Add(fdt); - } - } - } + ExecuteIntersectionQuery(sb.ToString(), fds); } + + /// /// Returns a datarow based on a RowID /// @@ -207,7 +231,11 @@ public override FeatureDataRow GetFeature(uint rowId) { using (var conn = new SqlConnection(ConnectionString)) { - string strSql = "select g.* from " + QualifiedTable + " g WHERE " + ObjectIdColumn + "=" + rowId + ""; + var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); + using (var adapter = new SqlDataAdapter(strSql, conn)) { var ds = new System.Data.DataSet(); @@ -227,12 +255,7 @@ public override FeatureDataRow GetFeature(uint rowId) foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn) fdr[col.ColumnName] = dr[col]; - - var geom = dr[GeometryColumn]; - Geometry sqlGeometry = null; - if (geom != null && geom != DBNull.Value) - sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)geom); - fdr.Geometry = sqlGeometry; + fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); return fdr; } return null; @@ -246,64 +269,73 @@ public override FeatureDataRow GetFeature(uint rowId) /// Returns all features with the view box /// /// view box - /// FeatureDataSet to fill data into - public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet ds) + /// FeatureDataSet to fill data into + public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet fds) { - using (var conn = new SqlConnection(ConnectionString)) - { - //Get bounding box string - string strBbox = GetBoxFilterStr(bbox); + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - string strSql = String.Format( - "SELECT g.* FROM {0} g {1} WHERE ", - QualifiedTable, BuildTableHints()); + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); - if (!String.IsNullOrEmpty(DefinitionQuery)) - strSql += DefinitionQuery + " AND "; + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - if (!ValidateGeometries || - (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) - // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - strSql += $"{GeometryColumn}.STIsValid() = 1 AND "; + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - strSql += strBbox; + if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); - string extraOptions = GetExtraOptions(); - if (!string.IsNullOrEmpty(extraOptions)) - strSql += " " + extraOptions; + ExecuteIntersectionQuery(sb.ToString(), fds); + } - using (var adapter = new SqlDataAdapter(strSql, conn)) + /// + /// Select records from database and return FeatureDataSet with SharpMap geometries + /// + protected override void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) + { + using (var conn = new SqlConnection(ConnectionString)) + { + conn.Open(); + using (var adapter = new SqlDataAdapter(sql, conn)) { - conn.Open(); - var ds2 = new System.Data.DataSet(); - adapter.Fill(ds2); + var ds = new System.Data.DataSet(); + adapter.Fill(ds); conn.Close(); - if (ds2.Tables.Count > 0) + if (ds.Tables.Count > 0) { - var fdt = new FeatureDataTable(ds2.Tables[0]); - foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn) fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - foreach (System.Data.DataRow dr in ds2.Tables[0].Rows) + + foreach (System.Data.DataRow dr in ds.Tables[0].Rows) { FeatureDataRow fdr = fdt.NewRow(); - - foreach (System.Data.DataColumn col in ds2.Tables[0].Columns) + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) if (col.ColumnName != GeometryColumn) fdr[col.ColumnName] = dr[col]; - var geom = dr[GeometryColumn]; - Geometry sqlGeometry = null; - if (geom != null && geom != DBNull.Value) - sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)geom); - fdr.Geometry = sqlGeometry; + fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); fdt.AddRow(fdr); } - ds.Tables.Add(fdt); + fds.Tables.Add(fdt); } } } } + private Geometry SqlBytesToGeometry(Object sqlBytes) + { + Geometry geom = null; + if (sqlBytes != null && sqlBytes != DBNull.Value) + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)sqlBytes, Factory); + else + geom = SqlGeographyConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeography)sqlBytes, Factory); + return geom; + } + } } diff --git a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs index 77c0e2eb..5a95da8e 100644 --- a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs +++ b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs @@ -21,6 +21,7 @@ using System; using Microsoft.SqlServer.Types; using SharpMap.Converters.SqlServer2008SpatialObjects; +using SharpMap.Data.Providers; using Geometry = GeoAPI.Geometries.IGeometry; namespace SharpMap.Geometries @@ -30,60 +31,170 @@ namespace SharpMap.Geometries ///
    public static class SpatialOperationsEx { + [Obsolete] public static Geometry Buffer(Geometry g, Double distance) { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgBuffer = sg.STBuffer(distance); - return SqlGeometryConverter.ToSharpMapGeometry(sgBuffer); + return Buffer(g, distance, SqlServerSpatialObjectType.Geometry); } + public static Geometry Buffer(Geometry g, Double distance, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgBuffer = sg.STBuffer(distance); + return SqlGeometryConverter.ToSharpMapGeometry(sgBuffer); + } + else + { + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + SqlGeography sgBuffer = sg.STBuffer(distance); + return SqlGeographyConverter.ToSharpMapGeometry(sgBuffer); + } + } + + [Obsolete] public static Geometry Union(Geometry g, params Geometry[] geometries) { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - foreach (SqlGeometry sgUnion in SqlGeometryConverter.ToSqlGeometries(geometries)) + return Union(g, SqlServerSpatialObjectType.Geometry, geometries); + } + + public static Geometry Union(Geometry g, SqlServerSpatialObjectType spatialMode, params Geometry[] geometries) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + foreach (SqlGeometry sgUnion in SqlGeometryConverter.ToSqlGeometries(geometries)) + { + sg = sg.STUnion(sgUnion); + } + return SqlGeometryConverter.ToSharpMapGeometry(sg); + } + else { - sg = sg.STUnion(sgUnion); + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + foreach (SqlGeography sgUnion in SqlGeographyConverter.ToSqlGeographies(geometries)) + { + sg = sg.STUnion(sgUnion); + } + return SqlGeographyConverter.ToSharpMapGeometry(sg); } - return SqlGeometryConverter.ToSharpMapGeometry(sg); + } + [Obsolete] public static Geometry Difference(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgDifference = sg1.STDifference(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgDifference); + return Difference(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Difference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgDifference = sg1.STDifference(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgDifference); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgDifference = sg1.STDifference(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgDifference); + } } + [Obsolete] public static Geometry SymDifference(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgSymDifference = sg1.STSymDifference(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgSymDifference); + return SymDifference(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry SymDifference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgSymDifference = sg1.STSymDifference(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgSymDifference); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgSymDifference = sg1.STSymDifference(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgSymDifference); + } } + [Obsolete] public static Geometry Intersection(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgIntersection = sg1.STIntersection(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgIntersection); + return Intersection(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Intersection(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgIntersection = sg1.STIntersection(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgIntersection); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgIntersection = sg1.STIntersection(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgIntersection); + } } + [Obsolete] public static Geometry ConvexHull(Geometry g) { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgConvexHull = sg.STConvexHull(); - return SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull); + return ConvexHull(g, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry ConvexHull(Geometry g, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgConvexHull = sg.STConvexHull(); + return SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull); + } + else + { + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + SqlGeography sgConvexHull = sg.STConvexHull(); + return SqlGeographyConverter.ToSharpMapGeometry(sgConvexHull); + } } + [Obsolete] public static Geometry Boundary(Geometry g) { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgBoundary = sg.STBoundary(); - return SqlGeometryConverter.ToSharpMapGeometry(sgBoundary); + return Boundary(g, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Boundary(Geometry g, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgBoundary = sg.STBoundary(); + return SqlGeometryConverter.ToSharpMapGeometry(sgBoundary); + } + else + { + throw new ArgumentOutOfRangeException ("Geography does not support STBoundary"); + } } } -} \ No newline at end of file +} diff --git a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs index 41c84e2e..d0bce709 100644 --- a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs +++ b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs @@ -19,6 +19,7 @@ using System; using Microsoft.SqlServer.Types; using SharpMap.Converters.SqlServer2008SpatialObjects; +using SharpMap.Data.Providers; using Geometry = GeoAPI.Geometries.IGeometry; namespace SharpMap.Geometries @@ -35,11 +36,34 @@ public static class SpatialRelationsEx /// Source geometry /// Other geometry /// True if otherGeometry is wholly contained within the source geometry. + [Obsolete] public static bool Contains(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)(sg1.STContains(sg2)); + return Contains(g1, g2, Data.Providers.SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as + /// reversing the primary and comparison shapes of the Within operation. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// True if otherGeometry is wholly contained within the source geometry. + public static bool Contains(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)(sg1.STContains(sg2)); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)(sg1.STContains(sg2)); + } } /// @@ -50,11 +74,33 @@ public static bool Contains(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Crosses(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STCrosses(sg2); + return Crosses(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than + /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. + /// geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Crosses(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STCrosses(sg2); + } + else + { + throw new ArgumentOutOfRangeException ("Geography does not support STCrosses. You must first convert Geography to Geometry using WKB"); + } } /// @@ -63,9 +109,29 @@ public static bool Crosses(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Disjoint(Geometry g1, Geometry g2) { - return !g2.Intersects(g1); + return Disjoint(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if otherGeometry is disjoint from the source geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Disjoint(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + return !g2.Intersects(g1); + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STDisjoint(sg2); + } } /// @@ -74,13 +140,34 @@ public static bool Disjoint(Geometry g1, Geometry g2) /// Source geometry /// Other Geometry /// + [Obsolete] public static bool Equals(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STEquals(sg2); + return Equals(g1, g2, SqlServerSpatialObjectType.Geometry); } + /// + /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. + /// + /// Source geometry + /// Other Geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Equals(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STEquals(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STEquals(sg2); + } + } /// /// Returns true if there is any intersection between the two geometries. @@ -88,11 +175,33 @@ public static bool Equals(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Intersects(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool) sg1.STIntersects(sg2); + return Intersects(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if there is any intersection between the two geometries. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Intersects(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STIntersects(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STIntersects(sg2); + } } /// @@ -102,11 +211,34 @@ public static bool Intersects(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Overlaps(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STOverlaps(sg2); + return Overlaps(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the intersection of the two geometries results in an object of the same dimension as the + /// input geometries and the intersection geometry is not equal to either geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Overlaps(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STOverlaps(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STOverlaps(sg2); + } } /// @@ -115,11 +247,31 @@ public static bool Overlaps(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Touches(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STTouches(sg2); + return Touches(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Touches(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STTouches(sg2); + } + else + { + throw new ArgumentOutOfRangeException("Geography does not support STTouches. You must first convert Geography to Geometry using WKB"); + } } /// @@ -128,11 +280,34 @@ public static bool Touches(Geometry g1, Geometry g2) /// Source geometry /// Other geometry /// + [Obsolete] public static bool Within(Geometry g1, Geometry g2) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STWithin(sg2); + return Within(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the primary geometry is wholly contained within the comparison geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Within(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STWithin(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STWithin(sg2); + } + } /// @@ -142,11 +317,32 @@ public static bool Within(Geometry g1, Geometry g2) /// Other geometry /// Intersection pattern Matrix /// + [Obsolete] public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix) { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STRelate(sg2, intersectionPatternMatrix); + return Relate(g1, g2, intersectionPatternMatrix, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the given geometries relate according to the provided intersection pattern Matrix + /// + /// Source geometry + /// Other geometry + /// Intersection pattern Matrix + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STRelate(sg2, intersectionPatternMatrix); + } + else + { + throw new ArgumentOutOfRangeException("Geography does not support STRelate. You must first convert Geography to Geometry using WKB"); + } } } -} \ No newline at end of file +} diff --git a/SharpMap.SqlServerSpatialObjects/ReadMe.txt b/SharpMap.SqlServerSpatialObjects/ReadMe.txt index 96888fd9..eef58259 100644 --- a/SharpMap.SqlServerSpatialObjects/ReadMe.txt +++ b/SharpMap.SqlServerSpatialObjects/ReadMe.txt @@ -12,4 +12,24 @@ http://www.microsoft.com/downloads/en/details.aspx?FamilyId=228DE03F-3B5A-428A-9 Look for "Microsoft SQL Server System CLR Types" Enjoy -FObermaier \ No newline at end of file +FObermaier + +================================================================================================================================= + +Update Nov 2018: Added support for SqlGeography + SqlServer2008Ex.cs + SqlGeographyConverter.cs (new class) + SpatialOperationsEx.cs (basic support for Geography) + SpatialRelationsEx.cs (basic support for Geography) + +Several more recents approaches were also considered, but would have caused breaking changes: +1) Drop reference to Microsoft.SqlServer.Types and replace with NuGet Microsoft.SqlServerTypes v14.0.1016.290 + This package support x86 and x64, and also includes SqlServerSpatialxxx.dll (no need to install any other Sql Server binaries). + Also requires binding redirects, and native SQL assemblies must be explicitly loaded at runtime by client (breaking change) +2) Use NuGet NetTopologySuite.Io.SqlServerBytes (released Oct 2018) instead of SqlGeometryConverter.cs + This package provides comprehenisve conversion between NTS geometry and SQL Server geometery/geography types, but targets NetStandard 2.0. + Also, SqlGeometryConverter.cs implements custom exception handling. + +Regards + +Tim diff --git a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj index e354d645..4a128028 100644 --- a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj +++ b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj @@ -37,6 +37,12 @@ false + + ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll + + + ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll @@ -59,6 +65,7 @@ + diff --git a/SharpMap.SqlServerSpatialObjects/packages.config b/SharpMap.SqlServerSpatialObjects/packages.config index 1a9735ad..9c979eb9 100644 --- a/SharpMap.SqlServerSpatialObjects/packages.config +++ b/SharpMap.SqlServerSpatialObjects/packages.config @@ -1,5 +1,7 @@  + + diff --git a/SharpMap/Data/Providers/SqlServer2008.cs b/SharpMap/Data/Providers/SqlServer2008.cs index 970d4b64..d735fd2d 100644 --- a/SharpMap/Data/Providers/SqlServer2008.cs +++ b/SharpMap/Data/Providers/SqlServer2008.cs @@ -102,8 +102,10 @@ public class SqlServer2008 : BaseProvider // column name used in queries for retrieving spatial column as WKB private const string SharpMapWkb = "sharpmapwkb"; - // required for restricting extents of WKT (eg bbox) used to query SqlGeography - protected static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 179.999999999, -89.999999999, 89.999999999); + // required for restricting extents of WKT (eg bbox) used to query SqlGeography to work around error + // 24206 "The specified input cannot be accepted because it contains an edge with antipodal points" + // FullGlobe will be used when map extents exceed this envelope. + protected static readonly Envelope GeogMaxExtents = new Envelope(-179.999999999, 180.0, -89.999999000, 89.999999000); // SqlGeography : polygon interior defined by left hand/foot rule (anti-clockwise orientation) // SqlGeometry : orientation is irrelevant @@ -466,7 +468,7 @@ protected string BuildTableHints() } return string.Empty; } - + /// /// Returns geometries within the specified bounding box /// @@ -563,7 +565,7 @@ public override Collection GetObjectIDsInView(Envelope bbox) (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); if (_logger.IsDebugEnabled) _logger.DebugFormat("GetObjectIDsInView {0}", sb.ToString()); @@ -594,11 +596,12 @@ public override Collection GetObjectIDsInView(Envelope bbox) /// protected string GetBoxFilterStr(Envelope bbox) { - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - bbox = bbox.Intersection(GeogMaxExtents); - var bboxText = Factory.ToGeometry(bbox).ToString(); + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !GeogMaxExtents.Contains(bbox)) + // ReorientObject() has no effect on FullGlobe + bboxText = "FullGlobe"; + // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" @@ -614,16 +617,6 @@ protected string GetBoxFilterStr(Envelope bbox) /// FeatureDataSet to fill data into protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSet fds) { - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - // Define Ring with Clockwise orientation, to be reoriented in query - var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { - GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), - GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), - GeogMaxExtents.BottomLeft()}); - geom = geom.Intersection(maxExentsPoly); - } - var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()}.STAsBinary() As {SharpMapWkb} " + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); @@ -639,7 +632,12 @@ protected override void OnExecuteIntersectionQuery(IGeometry geom, FeatureDataSe // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" - sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); + var geomText = geom.AsText(); + + if (SpatialObjectType == SqlServerSpatialObjectType.Geography && !GeogMaxExtents.Contains(geom.EnvelopeInternal)) + geomText = "FullGlobe"; + + sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geomText}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); diff --git a/UnitTests/Converters/SqlServer2008.cs b/UnitTests/Converters/SqlServer2008.cs index 15be71a9..25ee2b40 100644 --- a/UnitTests/Converters/SqlServer2008.cs +++ b/UnitTests/Converters/SqlServer2008.cs @@ -6,6 +6,7 @@ using SharpMap.Converters.WellKnownText; using SharpMap.Geometries; using Geometry = GeoAPI.Geometries.IGeometry; +using SharpMap.Data.Providers; namespace UnitTests.Converters { @@ -31,20 +32,35 @@ public void SetupFixture() } - private Geometry ToSqlServerAndBack(Geometry gIn) + private Geometry ToSqlServerAndBack(Geometry gIn, SqlServerSpatialObjectType spatialType) { - Assert.That(gIn, Is.Not.Null); - Assert.That(gIn.SRID, Is.EqualTo(-1)); - gIn.SRID = 0; - SqlGeometry sqlGeometry = SqlGeometryConverter.ToSqlGeometry(gIn); - Geometry gOut = SqlGeometryConverter.ToSharpMapGeometry(sqlGeometry, new NetTopologySuite.Geometries.GeometryFactory()); - return gOut; + //Assert.That(gIn.SRID, Is.EqualTo(-1)); + //gIn.SRID = 0; + Assert.That(gIn.SRID, Is.GreaterThan(0)); + + switch (spatialType) + { + case SqlServerSpatialObjectType.Geography: + SqlGeography sqlGeography = SqlGeographyConverter.ToSqlGeography(gIn); + //if (gIn is NetTopologySuite.Geometries.Polygon || gIn is NetTopologySuite.Geometries.MultiPolygon) + //{ + // sqlGeography.ReorientObject().MakeValid(); + //} + return SqlGeographyConverter.ToSharpMapGeometry(sqlGeography, new NetTopologySuite.Geometries.GeometryFactory()); + + default: + SqlGeometry sqlGeometry = SqlGeometryConverter.ToSqlGeometry(gIn); + return SqlGeometryConverter.ToSharpMapGeometry(sqlGeometry, new NetTopologySuite.Geometries.GeometryFactory()); + } } - [Test] - public void ConvertAndBack() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void ConvertAndBack(SqlServerSpatialObjectType spatialType) { + int srid = 4326; + //Prepare data Geometry gPn = GeometryFromWKT.Parse(Point); Geometry gMp = GeometryFromWKT.Parse(Multipoint); @@ -53,55 +69,83 @@ public void ConvertAndBack() Geometry gPl = GeometryFromWKT.Parse(Polygon); Geometry gMPol = GeometryFromWKT.Parse(MultiPolygon); + // Geography requires valid SRID + gPn.SRID = srid; + gMp.SRID = srid; + gLi.SRID = srid; + gML.SRID = srid; + gPl.SRID = srid; + gMPol.SRID = srid; + var comparison = new Comparison((u, v) => u.EqualsExact(v) ? 0 : 1); - Assert.That(ToSqlServerAndBack(gPn), Is.EqualTo(gPn).Using(comparison)); - Assert.That(ToSqlServerAndBack(gMp), Is.EqualTo(gMp).Using(comparison)); - Assert.That(ToSqlServerAndBack(gLi), Is.EqualTo(gLi).Using(comparison)); - Assert.That(ToSqlServerAndBack(gML), Is.EqualTo(gML).Using(comparison)); - Assert.That(ToSqlServerAndBack(gPl), Is.EqualTo(gPl).Using(comparison)); - Assert.That(ToSqlServerAndBack(gMPol), Is.EqualTo(gMPol).Using(comparison)); + Assert.That(ToSqlServerAndBack(gPn, spatialType), Is.EqualTo(gPn).Using(comparison)); + Assert.That(ToSqlServerAndBack(gMp, spatialType), Is.EqualTo(gMp).Using(comparison)); + Assert.That(ToSqlServerAndBack(gLi, spatialType), Is.EqualTo(gLi).Using(comparison)); + Assert.That(ToSqlServerAndBack(gML, spatialType), Is.EqualTo(gML).Using(comparison)); + Assert.That(ToSqlServerAndBack(gPl, spatialType), Is.EqualTo(gPl).Using(comparison)); + Assert.That(ToSqlServerAndBack(gMPol, spatialType), Is.EqualTo(gMPol).Using(comparison)); } - [Test] - public void Operations() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, 30)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, 1111120)] + public void Operations(SqlServerSpatialObjectType spatialType, double bufferDist) { + int srid = (spatialType == SqlServerSpatialObjectType.Geometry ? 0 : 4326); + //Prepare data Geometry gPn = GeometryFromWKT.Parse(Point); - gPn.SRID = 0; + gPn.SRID = srid; Geometry gMp = GeometryFromWKT.Parse(Multipoint); - gMp.SRID = 0; + gMp.SRID = srid; Geometry gLi = GeometryFromWKT.Parse(Linestring); - gLi.SRID = 0; + gLi.SRID = srid; Geometry gML = GeometryFromWKT.Parse(MultiLinestring); - gML.SRID = 0; + gML.SRID = srid; Geometry gPl = GeometryFromWKT.Parse(Polygon); - gPl.SRID = 0; + gPl.SRID = srid; - Geometry gPnBuffer30 = SpatialOperationsEx.Buffer(gPn, 30); + System.Diagnostics.Trace.WriteLine(spatialType.ToString()); + if (spatialType == SqlServerSpatialObjectType.Geography) + System.Diagnostics.Trace.WriteLine("SqlServer syntax (STGeomFromText does not require .ReorientObject()): SELECT geography::STGeomFromText(' insert WKT '), 4326)"); + + Geometry gPnBuffer30 = SpatialOperationsEx.Buffer(gPn, bufferDist, spatialType); System.Diagnostics.Trace.WriteLine(gPnBuffer30.ToString()); - Geometry gPnBuffer30IntersectiongPl = SpatialOperationsEx.Intersection(gPnBuffer30, gPl); + Geometry gPnBuffer30IntersectiongPl = SpatialOperationsEx.Intersection(gPnBuffer30, gPl, spatialType); System.Diagnostics.Trace.WriteLine(gPnBuffer30IntersectiongPl.ToString()); - Geometry gUnion = SpatialOperationsEx.Union(gPn, gMp, gML, gLi, gPl); + Geometry gUnion = SpatialOperationsEx.Union(gPn, spatialType, gMp, gML, gLi, gPl); System.Diagnostics.Trace.WriteLine(gUnion.ToString()); } [Test] [ExpectedException(typeof(SqlGeometryConverterException))] - public void FailingConversions() + public void FailingConversionGeom() { //Prepare data const string invalidMultiPolygon = "MULTIPOLYGON (((20 20, 20 30, 30 30, 30 20, 20 20)), ((21 21, 21 29, 29 29, 29 21, 21 21)))"; Geometry gMP = GeometryFromWKT.Parse(invalidMultiPolygon); - Assert.AreEqual(gMP, ToSqlServerAndBack(gMP)); + gMP.SRID = 4326; + Assert.AreEqual(gMP, ToSqlServerAndBack(gMP, SqlServerSpatialObjectType.Geometry)); + } + + [Test] + [ExpectedException(typeof(SqlGeographyConverterException))] + public void FailingConversionGeog() + { + //Prepare data + const string invalidMultiPolygon = "MULTIPOLYGON (((20 20, 20 30, 30 30, 30 20, 20 20)), ((21 21, 21 29, 29 29, 29 21, 21 21)))"; + Geometry gMP = GeometryFromWKT.Parse(invalidMultiPolygon); + gMP.SRID = 4326; + Assert.AreEqual(gMP, ToSqlServerAndBack(gMP, SqlServerSpatialObjectType.Geography)); } private string GetTestFile() { return System.IO.Path.Combine(GetPathToTestDataDir(), "SPATIAL_F_SKARVMUFF.shp"); + //return System.IO.Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); } private string GetPathToTestDataDir() @@ -109,20 +153,28 @@ private string GetPathToTestDataDir() return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); } - [Test] - public void TestShapeFile() + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestShapeFile(SqlServerSpatialObjectType spatialType) { using (var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), true)) { p.Open(); - for (uint i = 0; i < p.GetFeatureCount(); i++ ) + var env = p.GetExtents(); + if (spatialType == SqlServerSpatialObjectType.Geography && (env.MaxY > 90 || env.MaxY < -90)) + Assert.Ignore("Test file Y values exceed valid latitudes"); + + for (uint i = 0; i < p.GetFeatureCount(); i++) { var fdr = p.GetFeature(i); + if (fdr.Geometry == null) + continue; + try { - fdr.Geometry.SRID = -1; - var res = ToSqlServerAndBack(fdr.Geometry); + fdr.Geometry.SRID = 4326; + var res = ToSqlServerAndBack(fdr.Geometry, spatialType); Assert.AreEqual(fdr.Geometry, res); System.Diagnostics.Trace.WriteLine(string.Format("Feature {0} ({1}) converted!", i, fdr[0])); } @@ -130,9 +182,13 @@ public void TestShapeFile() { System.Diagnostics.Trace.WriteLine(string.Format("Feature {0} ({1}) conversion failed!", i, fdr[0])); } + catch (SqlGeographyConverterException) + { + System.Diagnostics.Trace.WriteLine(string.Format("Feature {0} ({1}) conversion failed!", i, fdr[0])); + } } } } } -} +} diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index d6f81605..467f3987 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -37,11 +37,23 @@ public void VerifySchemaDetection(string schemaTable, string tableSchema, string } [NUnit.Framework.TestFixture] - //[Ignore("Requires SqlServerSpatial")] public class SQLServer2008DbTests { - private const int GeographySrid = 4326; - private int _geometrySrid = 0; // + // IGNORE: + // 1) see SetupFixture where all SQLServer2008DbTests will be ignored if a valid SqlServer connection string is not supplied + // 2) see GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) where all + // tests involving SqlServer2008Ex provider can be skipped + // NUM RECORDS: + // see SetupFixture: indexes = indexes.Take(100); may be commented out to use all shapefile records + + public enum SqlServerProviderMode + { + WellKnownBinary, + NativeSqlBytes + } + + private const int GeographySrid = 4326; // Geography types MUST have a valid spatial reference + private int _geometrySrid = 0; private const string GeometrySpatialIndex = "IX_roads_ugl_GEOM"; private const string GeographySpatialIndex = "IX_roads_ugl_GEOG"; @@ -49,6 +61,9 @@ public class SQLServer2008DbTests private int _numInvalidGeoms; // number of invalid spatial features private int _numValidatedGeoms; // number of spatial featuress = _numValidGeoms + Validated(_numInvalidGeoms) private int _numFeatures; // number of records + private uint _idNullGeom; + private uint _idEmptyGeom; + private uint _idInvalidGeom; private string GetTestFile() { @@ -189,7 +204,7 @@ public void SetupFixture() } - // initialise counts + // initialise counts and test IDs using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 1"; @@ -202,6 +217,10 @@ public void SetupFixture() cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom"; _numFeatures = (int)cmd.ExecuteScalar(); + + _idNullGeom = (uint)(_numFeatures - 2); + _idEmptyGeom = (uint)(_numFeatures - 1); + _idInvalidGeom = (uint)(_numFeatures); } } @@ -232,31 +251,42 @@ public void TearDownTestFixture() private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialObjectType spatialType) { - switch (spatialType) + return GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); + } + + private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SqlServer2008 provider; + + switch (providerMode) { - case SqlServerSpatialObjectType.Geography: - // NB note forcing WGS84 - return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures) - { - //ValidateGeometries = true - //, - //DefinitionQuery = "ID NOT IN (103)" // Invalid Geom - }; + case SqlServerProviderMode.NativeSqlBytes: + Assert.Ignore("Ignore SharpMap.Data.Providers.SqlSErver2008Ex"); + + if (spatialType == SqlServerSpatialObjectType.Geography) + // NB note forcing WGS84 + provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + else + provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + break; + default: - return new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geom", "GEOM", "ID", spatialType) - { - //ValidateGeometries = true - //, - //DefinitionQuery = "ID NOT IN (103)" // Invalid Geom - }; + if (spatialType == SqlServerSpatialObjectType.Geography) + // NB note forcing WGS84 + provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + else + provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + break; } - } - private SharpMap.Data.Providers.SqlServer2008Ex GetTestProviderEx() - { - return new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, "roads_ugl_geom", "GEOM", "ID"); + //provider.ValidateGeometries = true + //provider.DefinitionQuery = "ID NOT IN (103)" // Invalid Geom + + return provider; } /// @@ -305,6 +335,15 @@ public void TestGetExtentsSpatialIndex(SqlServerSpatialObjectType spatialType) } } + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + [ExpectedException(typeof(ArgumentOutOfRangeException))] + public void TestSqlServer2008ExProviderOverridesValidateGeometries(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider( SqlServerProviderMode.NativeSqlBytes, spatialType); + sq.ValidateGeometries = false; + } + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialType) @@ -331,13 +370,17 @@ public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialTy Assert.IsNotNull(extents); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInView(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.ValidateGeometries = validateGeometries; var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); @@ -347,11 +390,13 @@ public void TestGetGeometriesInView(SqlServerSpatialObjectType spatialType, bool Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInViewDefinitionQuery(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInViewDefinitionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.DefinitionQuery = "NAME LIKE 'A%'"; @@ -361,13 +406,17 @@ public void TestGetGeometriesInViewDefinitionQuery(SqlServerSpatialObjectType sp Assert.LessOrEqual(geometries.Count, _numValidGeoms); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] - public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewNOLOCK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.NoLockHint = true; sq.ValidateGeometries = validateGeometries; @@ -378,13 +427,17 @@ public void TestGetGeometriesInViewNOLOCK(SqlServerSpatialObjectType spatialType } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] - public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewFORCESEEK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.ForceSeekHint = true; sq.ValidateGeometries = validateGeometries; @@ -396,15 +449,19 @@ public void TestGetGeometriesInViewFORCESEEK(SqlServerSpatialObjectType spatialT Assert.AreEqual(_numValidGeoms, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] - public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewFORCEINDEX(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - sq.ForceIndex = indexName; + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; sq.ValidateGeometries = validateGeometries; var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); @@ -414,19 +471,23 @@ public void TestGetGeometriesInViewFORCEINDEX(SqlServerSpatialObjectType spatial Assert.AreEqual(_numValidGeoms, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] - public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeoms) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; - sq.ForceIndex = indexName; + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; - sq.ValidateGeometries = validateGeoms; + sq.ValidateGeometries = validateGeometries; var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); Assert.IsNotNull(geometries); @@ -434,29 +495,7 @@ public void TestGetGeometriesInViewAllHints(SqlServerSpatialObjectType spatialTy Assert.AreEqual(_numValidGeoms, geometries.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] - //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] - //[NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInViewEx(SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - // Note: - // This test may fail with an InvalidCastException. This is caused by multiple versions of the - // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). - // This can be solved with a in the .config file. - // http://connect.microsoft.com/SQLServer/feedback/details/685654/invalidcastexception-retrieving-sqlgeography-column-in-ado-net-data-reader - - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProviderEx(); - sq.ValidateGeometries = validateGeometries; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - Assert.AreEqual(validateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); - } - [NUnit.Framework.Test()] - [Ignore("Do not run performance test by default, because it might fail because of external factors (busy CPU).")] public void TestPerformanceSqlServer2008ExProvider() { // Note: @@ -464,9 +503,19 @@ public void TestPerformanceSqlServer2008ExProvider() // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). // This can be solved with a in the .config file. - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerSpatialObjectType.Geometry); - SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProviderEx(); - GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(SqlServerSpatialObjectType.Geometry); + var spatialType = SqlServerSpatialObjectType.Geometry; + + // testing with both providers using ExtentsMode = QueryIndividualFeatures (ie the "heaviest" lifting) + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); + SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProvider(SqlServerProviderMode.NativeSqlBytes, spatialType); + + // Note: SqlServer2008Ex provider overrides ValidateGeometries behaviour, forcing this to true. + // So to compare apples-with-apples, the SqlServer2008 provider must also set ValidateGeometries = true. + // From my testing, SqlServer2008 performance is slightly faster when using ValidateGeometries = true, + // as the SQL where clause is simpler (does not require explicitly excluding invalid geometries) + sq.ValidateGeometries = true; + + GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(spatialType); List measurements = new List(200); List measurementsex = new List(200); System.Diagnostics.Stopwatch timer; @@ -494,6 +543,12 @@ public void TestPerformanceSqlServer2008ExProvider() TimeSpan avgex = TimeSpan.FromTicks((long)measurementsex.Average(x => x.Ticks)); // The SqlServer2008Ex provider should be faster: + // Update Nov 2018: apparently this is no longer the case. Multiple tests following recent updates have SqlServer2008 + // consistently outperforming SqlServer2008ex (100 - 3600 records). I'm not sure if this is due to improvments in later + // releases of SqlServer, or perhaps WKB payload smaller than SqlBytes (even though requires database CPU for WKB conversion) + // for local instance SqlExpress, SqlServer2008 is consistently 30% faster than SqlServer2008Ex + // for SqlServer on local database server, - I don't have one to test against + // for Azure SQL (50DTU limit, test peaking at 26DTU), SqlServer2008 is about 5% faster than SqlServer2008Ex Assert.Less(avgex, avg); } @@ -511,13 +566,17 @@ public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType, bool Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, objectIds.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] - public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestExecuteIntersectionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.ValidateGeometries = validateGeometries; @@ -528,17 +587,40 @@ public void TestExecuteIntersectionQuery(SqlServerSpatialObjectType spatialType, Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, GeometrySpatialIndex, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, GeographySpatialIndex, true)] - public void TestExecuteIntersectionQueryAllHints(SqlServerSpatialObjectType spatialType, string indexName, bool validateGeometries) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] + public void TestExecuteIntersectionQueryExceedGeogMaxExtents(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, + double x1, double x2, double y1, double y2) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + // occurs when user zooms out beyond map extents. For Geog, when latitude approaches 90 N or S can result in + // error 24206: "The specified input cannot be accepted because it contains an edge with antipodal points." + // Longitudes exceeding -179.99999999 or 180.0 are "wrapped" resulting in unexpected polygon (also contributes to err 24206) + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); + + sq.ExecuteIntersectionQuery(new GeoAPI.Geometries.Envelope(x1, x2, y1, y2), ds); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestExecuteIntersectionQueryAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); sq.NoLockHint = true; sq.ForceSeekHint = true; - sq.ForceIndex = indexName; + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; ; sq.ValidateGeometries = validateGeometries; SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); @@ -564,7 +646,7 @@ public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); sq.DefinitionQuery = "NAME LIKE 'A%'"; @@ -573,26 +655,89 @@ public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType sp Assert.LessOrEqual(count, _numValidGeoms); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetFeature(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeature(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); var feature = sq.GetFeature(1); Assert.IsNotNull(feature); + Assert.IsNotNull(feature.Geometry); } - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureNonExisting(SqlServerSpatialObjectType spatialType) + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureNonExisting(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); var feature = sq.GetFeature(99999999); Assert.IsNull(feature); } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureNullGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(_idNullGeom); + + Assert.IsNotNull(feature); + Assert.IsNull(feature.Geometry); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureEmptyGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(_idEmptyGeom); + + Assert.IsNotNull(feature); + Assert.IsTrue(feature.Geometry.IsEmpty); + } + + // NetTopologySuite.IO.WKBReader can make sense of SqlServer invalid Geoms! + //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetFeatureInvalidGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + sq.ValidateGeometries = validateGeometries; + + var feature = sq.GetFeature(_idInvalidGeom); + + Assert.IsNotNull(feature); + if (providerMode== SqlServerProviderMode.NativeSqlBytes) + // client side conversion always attempts validation + Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); + else + { + if (validateGeometries) + Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); + else + Assert.IsTrue(feature.Geometry.IsEmpty); + } + } + } } diff --git a/UnitTests/Serialization/ProviderTest.cs b/UnitTests/Serialization/ProviderTest.cs index 3c831ab2..fea53d8b 100644 --- a/UnitTests/Serialization/ProviderTest.cs +++ b/UnitTests/Serialization/ProviderTest.cs @@ -130,6 +130,28 @@ public void TestSqlServer2008(SqlServerSpatialObjectType spatialType) Assert.AreEqual(sql2008S.ExtentsMode, sql2008D.ExtentsMode); } + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestSqlServer2008Ex(SqlServerSpatialObjectType spatialType) + { + var sql2008S = new SqlServer2008Ex("Data Source=IVV-SQLD; Database=OBE;Integrated Security=SSPI;", + "roads", "spatialCol", "idCol", + spatialType, + 4326, + SqlServer2008ExtentsMode.EnvelopeAggregate); + + var sql2008D = SandD(sql2008S, GetFormatter()); + + Assert.AreEqual(sql2008S.ConnectionString, sql2008D.ConnectionString); + Assert.AreEqual(sql2008S.Table, sql2008D.Table); + Assert.AreEqual(sql2008S.TableSchema, sql2008D.TableSchema); + Assert.AreEqual(sql2008S.GeometryColumn, sql2008D.GeometryColumn); + Assert.AreEqual(sql2008S.ObjectIdColumn, sql2008D.ObjectIdColumn); + Assert.AreEqual(sql2008S.SpatialObjectType, sql2008D.SpatialObjectType); + Assert.AreEqual(sql2008S.SRID, sql2008D.SRID); + Assert.AreEqual(sql2008S.ExtentsMode, sql2008D.ExtentsMode); + } + #endif } From 1799eceaac9684adf3fdd4859a522cfbf93e67d9 Mon Sep 17 00:00:00 2001 From: Tim C Date: Wed, 19 Jun 2019 13:18:34 +0700 Subject: [PATCH 086/186] Improve ScaleBar for WebMercator projections * Apply `Math.Cos(centralLatitude)` correction on ScaleBar for WebMercator (SRID=3857). * Add unit tests for ScaleBar with intervals at a variety of scales and center-latitudes for WebMercator (3857), WGS84, and UTM zone. * Update ScaleBar and add WebMercator graticule to WinFormSamples --- Examples/WinFormSamples/Form2.Designer.cs | 358 +-- Examples/WinFormSamples/Form2.cs | 574 +++- .../Rendering/Decoration/MapDecoration.cs | 572 ++-- .../Decoration/MapDecorationAnchor.cs | 116 +- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 2463 +++++++++-------- .../Decoration/ScaleBar/ScaleBarTests.cs | 1274 +++++++++ UnitTests/UnitTests.csproj | 741 ++--- 7 files changed, 3853 insertions(+), 2245 deletions(-) create mode 100644 UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs diff --git a/Examples/WinFormSamples/Form2.Designer.cs b/Examples/WinFormSamples/Form2.Designer.cs index 7a9210db..e51cfd30 100644 --- a/Examples/WinFormSamples/Form2.Designer.cs +++ b/Examples/WinFormSamples/Form2.Designer.cs @@ -1,165 +1,193 @@ -namespace WinFormSamples -{ - partial class Form2 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.button6 = new System.Windows.Forms.Button(); - this.mapBox1 = new SharpMap.Forms.MapBox(); - this.button7 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // button2 - // - this.button2.Location = new System.Drawing.Point(13, 42); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 1; - this.button2.Text = "zoom out"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.Location = new System.Drawing.Point(13, 71); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 1; - this.button3.Text = "zoom in"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button4 - // - this.button4.Location = new System.Drawing.Point(13, 13); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(75, 23); - this.button4.TabIndex = 1; - this.button4.Text = "pan"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(94, 13); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Google"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button5 - // - this.button5.Location = new System.Drawing.Point(94, 42); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(75, 23); - this.button5.TabIndex = 1; - this.button5.Text = "Bing"; - this.button5.UseVisualStyleBackColor = true; - this.button5.Click += new System.EventHandler(this.button5_Click); - // - // button6 - // - this.button6.Location = new System.Drawing.Point(94, 71); - this.button6.Name = "button6"; - this.button6.Size = new System.Drawing.Size(75, 23); - this.button6.TabIndex = 1; - this.button6.Text = "OSM"; - this.button6.UseVisualStyleBackColor = true; - this.button6.Click += new System.EventHandler(this.button6_Click); - // - // mapBox1 - // - this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; - this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; - this.mapBox1.CustomTool = null; - this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.mapBox1.FineZoomFactor = 10D; - this.mapBox1.Location = new System.Drawing.Point(0, 0); - this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; - this.mapBox1.Name = "mapBox1"; - this.mapBox1.PreviewMode = SharpMap.Forms.MapBox.PreviewModes.Fast; - this.mapBox1.QueryGrowFactor = 5F; - this.mapBox1.QueryLayerIndex = 0; - this.mapBox1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); - this.mapBox1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); - this.mapBox1.ShowProgressUpdate = false; - this.mapBox1.Size = new System.Drawing.Size(669, 503); - this.mapBox1.TabIndex = 2; - this.mapBox1.TakeFocusOnHover = true; - this.mapBox1.Text = "mapBox1"; - this.mapBox1.WheelZoomMagnitude = 2D; - // - // button7 - // - this.button7.Location = new System.Drawing.Point(94, 100); - this.button7.Name = "button7"; - this.button7.Size = new System.Drawing.Size(75, 23); - this.button7.TabIndex = 3; - this.button7.Text = "SharpMap"; - this.button7.UseVisualStyleBackColor = true; - this.button7.Click += new System.EventHandler(this.button7_Click); - // - // Form2 - // - this.ClientSize = new System.Drawing.Size(669, 503); - this.Controls.Add(this.button7); - this.Controls.Add(this.button4); - this.Controls.Add(this.button6); - this.Controls.Add(this.button5); - this.Controls.Add(this.button1); - this.Controls.Add(this.button3); - this.Controls.Add(this.button2); - this.Controls.Add(this.mapBox1); - this.DoubleBuffered = true; - this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Name = "Form2"; - this.Text = "Map"; - this.Load += new System.EventHandler(this.Form2_Load); - this.SizeChanged += new System.EventHandler(this.Form2_SizeChanged); - this.ResumeLayout(false); - - } - - #endregion - - private SharpMap.Forms.MapBox mapBox1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.Button button6; - private System.Windows.Forms.Button button7; - } -} \ No newline at end of file +namespace WinFormSamples +{ + partial class Form2 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.mapBox1 = new SharpMap.Forms.MapBox(); + this.button7 = new System.Windows.Forms.Button(); + this.chkScaleBar = new System.Windows.Forms.CheckBox(); + this.chkGraticule = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(13, 42); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "zoom out"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(13, 71); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 1; + this.button3.Text = "zoom in"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(13, 13); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 1; + this.button4.Text = "pan"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(94, 13); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Google"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(94, 42); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 1; + this.button5.Text = "Bing"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(94, 71); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(75, 23); + this.button6.TabIndex = 1; + this.button6.Text = "OSM"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // mapBox1 + // + this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; + this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.mapBox1.CustomTool = null; + this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.mapBox1.FineZoomFactor = 10D; + this.mapBox1.Location = new System.Drawing.Point(0, 0); + this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; + this.mapBox1.Name = "mapBox1"; + this.mapBox1.PreviewMode = SharpMap.Forms.MapBox.PreviewModes.Fast; + this.mapBox1.QueryGrowFactor = 5F; + this.mapBox1.QueryLayerIndex = 0; + this.mapBox1.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (210)))), + ((int) (((byte) (244)))), ((int) (((byte) (244)))), ((int) (((byte) (244))))); + this.mapBox1.SelectionForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (244)))), + ((int) (((byte) (244)))), ((int) (((byte) (244))))); + this.mapBox1.ShowProgressUpdate = false; + this.mapBox1.Size = new System.Drawing.Size(669, 503); + this.mapBox1.TabIndex = 2; + this.mapBox1.TakeFocusOnHover = true; + this.mapBox1.Text = "mapBox1"; + this.mapBox1.WheelZoomMagnitude = 2D; + // + // button7 + // + this.button7.Location = new System.Drawing.Point(94, 100); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(75, 23); + this.button7.TabIndex = 3; + this.button7.Text = "SharpMap"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // chkScaleBar + // + this.chkScaleBar.Location = new System.Drawing.Point(13, 103); + this.chkScaleBar.Name = "chkScaleBar"; + this.chkScaleBar.Size = new System.Drawing.Size(75, 20); + this.chkScaleBar.TabIndex = 4; + this.chkScaleBar.Text = "Scale Bar"; + this.chkScaleBar.UseVisualStyleBackColor = true; + this.chkScaleBar.Click += new System.EventHandler(this.chkScaleBar_Checked); + // + // chkGraticule + // + this.chkGraticule.Location = new System.Drawing.Point(13, 129); + this.chkGraticule.Name = "chkGraticule"; + this.chkGraticule.Size = new System.Drawing.Size(156, 19); + this.chkGraticule.TabIndex = 5; + this.chkGraticule.Text = "Graticule"; + this.chkGraticule.UseVisualStyleBackColor = true; + this.chkGraticule.Click += new System.EventHandler(this.chkGraticule_Checked); + // + // Form2 + // + this.ClientSize = new System.Drawing.Size(669, 503); + this.Controls.Add(this.chkGraticule); + this.Controls.Add(this.chkScaleBar); + this.Controls.Add(this.button7); + this.Controls.Add(this.button4); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.button1); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.mapBox1); + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, + System.Drawing.GraphicsUnit.Point, ((byte) (0))); + this.Name = "Form2"; + this.Text = "Map"; + this.Load += new System.EventHandler(this.Form2_Load); + this.SizeChanged += new System.EventHandler(this.Form2_SizeChanged); + this.ResumeLayout(false); + } + + #endregion + + private SharpMap.Forms.MapBox mapBox1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.CheckBox chkScaleBar; + private System.Windows.Forms.CheckBox chkGraticule; + private System.Windows.Forms.Button button7; + } +} diff --git a/Examples/WinFormSamples/Form2.cs b/Examples/WinFormSamples/Form2.cs index 5e4d8980..e2ca1d27 100644 --- a/Examples/WinFormSamples/Form2.cs +++ b/Examples/WinFormSamples/Form2.cs @@ -1,144 +1,430 @@ -using BruTile.Predefined; - -namespace WinFormSamples -{ - using System; - using System.Collections.Generic; - using System.Drawing; - using System.Drawing.Drawing2D; - using System.IO; - using System.Windows.Forms; - - using BruTile; - using BruTile.Cache; - //using BruTile.PreDefined; - using BruTile.Web; - - using GeoAPI.Geometries; - - using NetTopologySuite.Geometries; - - using GeoAPI.CoordinateSystems.Transformations; - - using SharpMap.Data.Providers; - using SharpMap.Forms; - using SharpMap.Layers; - using SharpMap.Styles; - - public partial class Form2 : Form - { - public Form2() - { - this.InitializeComponent(); - // this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); - this.UpdateStyles(); - } - - private void Form2_Load(object sender, EventArgs e) - { - var tileLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging), "TileLayer"); - - this.mapBox1.Map.BackgroundLayer.Add(tileLayer); - GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 3857); - - IMathTransform mathTransform = LayerTools.Wgs84toGoogleMercator.MathTransform; - Envelope geom = GeometryTransform.TransformBox( - new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), - mathTransform); - - //Adds a pushpin layer - VectorLayer pushPinLayer = new VectorLayer("PushPins"); - List geos = new List(); - geos.Add(gf.CreatePoint(geom.Centre)); - GeometryProvider geoProvider = new GeometryProvider(geos); - pushPinLayer.DataSource = geoProvider; - //this.mapBox1.Map.Layers.Add(pushPinLayer); - - this.mapBox1.Map.ZoomToBox(geom); - this.mapBox1.Map.Zoom = 8500; - this.mapBox1.Refresh(); - } - - private void button4_Click(object sender, EventArgs e) - { - this.mapBox1.ActiveTool = MapBox.Tools.Pan; - } - - private void button3_Click(object sender, EventArgs e) - { - this.mapBox1.ActiveTool = MapBox.Tools.ZoomWindow; - } - - private void button2_Click(object sender, EventArgs e) - { - this.mapBox1.ActiveTool = MapBox.Tools.ZoomOut; - } - - private void Form2_SizeChanged(object sender, EventArgs e) - { - this.mapBox1.Refresh(); - } - - private void button1_Click(object sender, EventArgs e) - { - var googleLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingHybridStaging), "TileLayer - Bing"); - this.mapBox1.Map.BackgroundLayer.Clear(); - this.mapBox1.Map.BackgroundLayer.Add(googleLayer); - this.mapBox1.Refresh(); - } - - private void button5_Click(object sender, EventArgs e) - { - - TileAsyncLayer bingLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging), "TileLayer - Bing"); - this.mapBox1.Map.BackgroundLayer.Clear(); - this.mapBox1.Map.BackgroundLayer.Add(bingLayer); - this.mapBox1.Refresh(); - } - - private void button6_Click(object sender, EventArgs e) - { - TileAsyncLayer osmLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.OpenStreetMap), "TileLayer - OSM"); - this.mapBox1.Map.BackgroundLayer.Clear(); - this.mapBox1.Map.BackgroundLayer.Add(osmLayer); - this.mapBox1.Refresh(); - } - - private void button7_Click(object sender, EventArgs e) - { - ITileSchema schema = new GlobalSphericalMercator(); - ILayer[] layers = CreateLayers(); - SharpMapTileSource source = new SharpMapTileSource(schema, layers); - TileAsyncLayer osmLayer = new TileAsyncLayer(source, "TileLayer - SharpMap"); - this.mapBox1.Map.BackgroundLayer.Clear(); - this.mapBox1.Map.BackgroundLayer.Add(osmLayer); - this.mapBox1.Refresh(); - } - - private static ILayer[] CreateLayers() - { - ILayer countries = CreateLayer("GeoData/World/countries.shp", new VectorStyle { EnableOutline = true, Fill = new SolidBrush(Color.Green) }); - ILayer rivers = CreateLayer("GeoData/World/rivers.shp", new VectorStyle { Line = new Pen(Color.Blue) }); - ILayer cities = CreateLayer("GeoData/World/cities.shp", new VectorStyle()); - return new[] { countries, rivers, cities }; - } - - private static ILayer CreateLayer(string path, VectorStyle style) - { - FileInfo file = new FileInfo(path); - if (!file.Exists) - throw new FileNotFoundException("file not found", path); - - string full = file.FullName; - string name = Path.GetFileNameWithoutExtension(full); - ILayer layer = new VectorLayer(name, new ShapeFile(full, true)) - { - SRID = 900913, - CoordinateTransformation = LayerTools.Wgs84toGoogleMercator, - Style = style, - SmoothingMode = SmoothingMode.AntiAlias - }; - return layer; - } - } -} +using System.Data; +using System.Linq; +using BruTile.Predefined; +using SharpMap.Data; +using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Decoration.ScaleBar; + +namespace WinFormSamples +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Drawing.Drawing2D; + using System.IO; + using System.Windows.Forms; + using BruTile; + //using BruTile.PreDefined; + using GeoAPI.Geometries; + using NetTopologySuite.Geometries; + using GeoAPI.CoordinateSystems.Transformations; + using SharpMap.Data.Providers; + using SharpMap.Forms; + using SharpMap.Layers; + using SharpMap.Styles; + + public partial class Form2 : Form + { + private const double WebMercatorRadius = 6378137.0; + private readonly Envelope _webMercatorEnv = new Envelope(-20037508.34,20037508.34,-20000000,20000000); + private readonly Polygon _webMercatorPoly = null; + + private const int PowerRangeMin = -5; + private const int PowerRangeMax = 10; + private readonly double[] _niceNumberArray = {1, 2, 2.5, 5}; + + public Form2() + { + this.InitializeComponent(); + // this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); + this.UpdateStyles(); + + _webMercatorPoly = EnvToPolygon(_webMercatorEnv); + } + + private void Form2_Load(object sender, EventArgs e) + { + var tileLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging), "TileLayer"); + + this.mapBox1.Map.BackgroundLayer.Add(tileLayer); + GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 3857); + + IMathTransform mathTransform = LayerTools.Wgs84toGoogleMercator.MathTransform; + Envelope geom = GeometryTransform.TransformBox( + new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), + mathTransform); + + //Adds a pushpin layer + VectorLayer pushPinLayer = new VectorLayer("PushPins"); + List geos = new List(); + geos.Add(gf.CreatePoint(geom.Centre)); + GeometryProvider geoProvider = new GeometryProvider(geos); + pushPinLayer.DataSource = geoProvider; + //this.mapBox1.Map.Layers.Add(pushPinLayer); + + // ScaleGraticule + this.mapBox1.Map.Layers.AddCollection(CreateGraticuleLayers()); + + // ScaleBar + this.mapBox1.Map.SRID = 3857; + this.mapBox1.Map.Decorations.Add( + new ScaleBar + { + Anchor = MapDecorationAnchor.RightCenter, + Enabled = chkScaleBar.Checked + }); + + this.mapBox1.Map.ZoomToBox(geom); + this.mapBox1.Map.Zoom = 8500; + this.mapBox1.Refresh(); + } + + private LayerCollection CreateGraticuleLayers() + { + var layers = new LayerCollection(); + + // Graticule Layer + var graticuleLyr = new VectorLayer("Graticule"); + graticuleLyr.DataSource = CreateGraticuleDatasource(); + graticuleLyr.Style.Line.Color = Color.DarkSlateGray; + var majorIntStyle = new VectorStyle() + { + Line = new System.Drawing.Pen(Brushes.DarkBlue, 2) + }; + + var minorIntStyle = new VectorStyle() + { + Line = new System.Drawing.Pen(Brushes.DarkSlateGray, 1){DashStyle = DashStyle.Dash} + }; + + //Create the theme items + var dictStyles = new Dictionary(); + dictStyles.Add(true, majorIntStyle); + dictStyles.Add(false, minorIntStyle); + + //Assign the theme + graticuleLyr.Theme = + new SharpMap.Rendering.Thematics.UniqueValuesTheme("Major", dictStyles, minorIntStyle); + layers.Add(graticuleLyr); + + // labels + var labelLyr = new LabelLayer("Graticule Labels"); + labelLyr.DataSource = graticuleLyr.DataSource; + labelLyr.LabelColumn = "Label"; + labelLyr.LabelStringDelegate = row => ((bool)row["Major"] ? (string)row["Label"] : ""); + + var labelStyle = (LabelStyle) labelLyr.Style; + labelStyle.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; + labelStyle.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; + +// labelLyr.Style = new LabelStyle(); +// labelLyr.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.SimpleCollisionDetection; +// labelLyr.Style.CollisionDetection = true; +// labelLyr.Style.CollisionBuffer = new SizeF(2, 2); +// labelLyr.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; +// labelLyr.Styletyle.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; + + + layers.Add(labelLyr); + + return layers; + } + + private void button4_Click(object sender, EventArgs e) + { + this.mapBox1.ActiveTool = MapBox.Tools.Pan; + } + + private void button3_Click(object sender, EventArgs e) + { + this.mapBox1.ActiveTool = MapBox.Tools.ZoomWindow; + } + + private void button2_Click(object sender, EventArgs e) + { + this.mapBox1.ActiveTool = MapBox.Tools.ZoomOut; + } + + private void Form2_SizeChanged(object sender, EventArgs e) + { + this.mapBox1.Refresh(); + } + + private void button1_Click(object sender, EventArgs e) + { + var googleLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingHybridStaging), + "TileLayer - Bing"); + this.mapBox1.Map.BackgroundLayer.Clear(); + this.mapBox1.Map.BackgroundLayer.Add(googleLayer); + this.mapBox1.Refresh(); + } + + private void button5_Click(object sender, EventArgs e) + { + TileAsyncLayer bingLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging), + "TileLayer - Bing"); + this.mapBox1.Map.BackgroundLayer.Clear(); + this.mapBox1.Map.BackgroundLayer.Add(bingLayer); + this.mapBox1.Refresh(); + } + + private void button6_Click(object sender, EventArgs e) + { + TileAsyncLayer osmLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.OpenStreetMap), + "TileLayer - OSM"); + this.mapBox1.Map.BackgroundLayer.Clear(); + this.mapBox1.Map.BackgroundLayer.Add(osmLayer); + this.mapBox1.Refresh(); + } + + private void button7_Click(object sender, EventArgs e) + { + ITileSchema schema = new GlobalSphericalMercator(); + ILayer[] layers = CreateLayers(); + SharpMapTileSource source = new SharpMapTileSource(schema, layers); + TileAsyncLayer osmLayer = new TileAsyncLayer(source, "TileLayer - SharpMap"); + this.mapBox1.Map.BackgroundLayer.Clear(); + this.mapBox1.Map.BackgroundLayer.Add(osmLayer); + this.mapBox1.Refresh(); + } + + private static ILayer[] CreateLayers() + { + ILayer countries = CreateLayer("GeoData/World/countries.shp", + new VectorStyle {EnableOutline = true, Fill = new SolidBrush(Color.Green)}); + ILayer rivers = CreateLayer("GeoData/World/rivers.shp", new VectorStyle {Line = new Pen(Color.Blue)}); + ILayer cities = CreateLayer("GeoData/World/cities.shp", new VectorStyle()); + return new[] {countries, rivers, cities}; + } + + private static ILayer CreateLayer(string path, VectorStyle style) + { + FileInfo file = new FileInfo(path); + if (!file.Exists) + throw new FileNotFoundException("file not found", path); + + string full = file.FullName; + string name = Path.GetFileNameWithoutExtension(full); + ILayer layer = new VectorLayer(name, new ShapeFile(full, true)) + { + SRID = 4326, + //CoordinateTransformation = LayerTools.Wgs84toGoogleMercator, + TargetSRID = 3857, + Style = style, + SmoothingMode = SmoothingMode.AntiAlias + }; + return layer; + } + + private void chkScaleBar_Checked(object sender, EventArgs e) + { + var scaleBar = mapBox1.Map.Decorations[0] as ScaleBar; + if (scaleBar == null) return; + scaleBar.Enabled = chkScaleBar.Checked; + this.mapBox1.Refresh(); + } + + private void chkGraticule_Checked(object sender, EventArgs e) + { + foreach (var lyr in this.mapBox1.Map.Layers) + if (lyr.LayerName.StartsWith("Graticule")) + lyr.Enabled = chkGraticule.Checked; + + if (chkGraticule.Checked) + if (chkGraticule.Checked) DrawGraticule(); + + this.mapBox1.Refresh(); + } + + private GeometryFeatureProvider CreateGraticuleDatasource() + { + var fdt = new FeatureDataTable {TableName = "Graticule"}; + fdt.Columns.Add(new DataColumn("oid", typeof(uint))); + fdt.Columns[0].AutoIncrement = true; + + fdt.Columns.Add(new DataColumn("Label", typeof(string))); + fdt.Columns.Add(new DataColumn("Major", typeof(bool))); + + fdt.PrimaryKey = new[] {fdt.Columns[0]}; + + return new GeometryFeatureProvider(fdt); + + } + + private void DrawGraticule() + { + if (!chkGraticule.Checked) return; + + var mapExtentsEnv = this.mapBox1.Map.Envelope; + var mapExtentsPoly = EnvToPolygon(mapExtentsEnv); + + //var minSide = Math.Min(extents.Width, extents.Height); + var majorInt = CalcGraticuleInterval(mapExtentsEnv.Height / 2); + var minorInt = majorInt / 10; + this.chkGraticule.Text = $"Graticule ({minorInt:N0}m)"; + + var constrExtents = CalcContructionExtents(mapExtentsEnv, minorInt); + + var graticuleLyr = (VectorLayer) mapBox1.Map.Layers.GetLayerByName("Graticule"); + var gfp = (GeometryFeatureProvider) graticuleLyr.DataSource; + var fdt = gfp.Features; + lock (fdt.Rows.SyncRoot) + { + gfp.Features.Clear(); + gfp.Features.BeginLoadData(); + + // horizontal graticule CONSTRAINED to both Map extents AND _webMercatorExtents + for (var thisY = Math.Max(constrExtents.MinY, _webMercatorEnv.MinY); + thisY <= Math.Min(constrExtents.MaxY, _webMercatorEnv.MaxY); + thisY += minorInt) + { + if (thisY < mapExtentsEnv.MinY || thisY > mapExtentsEnv.MaxY) continue; + + var fdr = gfp.Features.NewRow(); + fdr["Label"] = $" {thisY:N0}"; + fdr["Major"] = (thisY % majorInt == 0) ? true: false; + fdr.Geometry = new LineString( + new[] + { + // NB intentional use of mapExtentsEnv (instead of constrExtents) + new Coordinate(Math.Max(mapExtentsEnv.MinX, _webMercatorEnv.MinX), thisY), + new Coordinate(Math.Min(mapExtentsEnv.MaxX, _webMercatorEnv.MaxX), thisY) + } + ); + gfp.Features.AddRow(fdr); + } + + // vertical graticule CLIPPED to _webMercatorPoly AND _mapExtentsPoly + for (var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += minorInt) + { + var geom = ConstructMeridianGraticule(thisX, minorInt, constrExtents, mapExtentsPoly); + if (geom == null || geom.IsEmpty) continue; + + var fdr = gfp.Features.NewRow(); + fdr["Label"] = $" {thisX:N0}"; + fdr["Major"] = (thisX % majorInt == 0) ? true: false; + fdr.Geometry = geom; + gfp.Features.AddRow(fdr); + + } + + gfp.Features.EndLoadData(); + } + } + + private Polygon EnvToPolygon(Envelope env) + { + var linearRing = new LinearRing(new Coordinate[] + { + new Coordinate(env.BottomLeft()), + new Coordinate(env.TopLeft()), + new Coordinate(env.TopRight()), + new Coordinate(env.BottomRight()), + new Coordinate(env.BottomLeft()) + }); + return new Polygon(linearRing); + } + + private Envelope CalcContructionExtents(Envelope extents, double minorInt) + { + + // Y extents expanded to next increment of minorInt + var minY= Math.Floor(extents.MinY / minorInt) * minorInt; + if (extents.MinY < 0) minY -= minorInt; + + var maxY = Math.Ceiling(extents.MaxY / minorInt) * minorInt; + if (extents.MaxY < 0) maxY += minorInt; + + // X extents more complicated + double lowerLeftX, upperLeftX, upperRightX, lowerRightX; + + if (Math.Max(extents.MinX, _webMercatorEnv.MinX) < 0 && + Math.Max(extents.MinY, _webMercatorEnv.MinY) < 0 && + Math.Min(extents.MaxY , _webMercatorEnv.MaxY) >= 0) + { + // LHS extents lies to the left of central meridian with vt extent spanning equator + lowerLeftX = upperLeftX = Math.Max(extents.MinX, _webMercatorEnv.MinX); + } + else + { + lowerLeftX = CalcEquatorialX(extents.BottomLeft()); + upperLeftX = CalcEquatorialX(extents.TopLeft()); + } + + if (Math.Min(extents.MaxX, _webMercatorEnv.MaxX) >= 0 && + Math.Max(extents.MinY, _webMercatorEnv.MinY) < 0 && + Math.Min(extents.MaxY , _webMercatorEnv.MaxY) >= 0) + { + // RHS extents lists to right of central meridian with vt extent spanning equator + lowerRightX = upperRightX = Math.Min(extents.MaxX, _webMercatorEnv.MaxX); + } + else + { + lowerRightX = CalcEquatorialX(extents.BottomRight()); + upperRightX = CalcEquatorialX(extents.TopRight()); + } + + // X extents expanded to next largest increment of minorInt + var minX = Math.Floor(Math.Abs(Math.Min(lowerLeftX, upperLeftX)) / minorInt) * minorInt; + if (Math.Min(lowerLeftX, upperLeftX) < 0) minX *= -1; + + var maxX = Math.Ceiling(Math.Abs(Math.Max(lowerRightX, upperRightX)) / minorInt) * minorInt; + if (Math.Max(lowerRightX, upperRightX) < 0) maxX *= -1; + + // envelope MAY exceed _webMercatorExtents. Dangles will be clipped when drawing geometry. + return new Envelope(minX, maxX, minY, maxY); + + } + + private double CalcEquatorialX(Coordinate coord) + { + var scaleFactor = Math.Cosh(Math.Abs(coord.Y) / WebMercatorRadius); + return coord.X / scaleFactor; + } + + private double CalcScaleCorrectedX(double x, double y) + { + var scaleFactor = Math.Cosh(Math.Abs(y) / WebMercatorRadius); + return x * scaleFactor; + } + + private IGeometry ConstructMeridianGraticule(double thisX, double minorInt, Envelope constrExtents, Polygon mapExtents) + { + var coords = new CoordinateList(); + + var thisY = constrExtents.MinY; + while (thisY <= constrExtents.MaxY) + { + coords.Add(new Coordinate(CalcScaleCorrectedX(thisX, thisY), thisY)); + thisY += minorInt; + } + + var graticule = (IGeometry) new LineString(coords.ToArray()); + if (!_webMercatorEnv.Contains(graticule.EnvelopeInternal)) + graticule = _webMercatorPoly.Intersection(graticule); + + if (!mapExtents.EnvelopeInternal.Contains(graticule.EnvelopeInternal)) + graticule = mapExtents.Intersection(graticule); + + return graticule; + } + + private double CalcGraticuleInterval(double maxInterval) + { + int y; //power of 10. Range of -5 to 10 gives huge scale range. + double candidate = 0d; //Candidate value for new interval. + for (y = PowerRangeMax; y >= PowerRangeMin; y--) + { + double multiplier = Math.Pow(10, y); //Mulitiplier, =10^exp, to apply to nice numbers. + foreach (var niceNumber in _niceNumberArray.Reverse()) + { + candidate = niceNumber * multiplier; + if (candidate <= maxInterval) + return candidate; + } + } + + return candidate; //return the maximum + } + } +} diff --git a/SharpMap/Rendering/Decoration/MapDecoration.cs b/SharpMap/Rendering/Decoration/MapDecoration.cs index c8839574..404d1e26 100644 --- a/SharpMap/Rendering/Decoration/MapDecoration.cs +++ b/SharpMap/Rendering/Decoration/MapDecoration.cs @@ -1,286 +1,286 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; - -namespace SharpMap.Rendering.Decoration -{ - // ReSharper disable InconsistentNaming - /// - /// Abstract base class for all map decorations. - /// - /// Handles framing and positioning of the decoration - /// - /// - [Serializable] - public abstract class MapDecoration : /* Component, */IMapDecoration - { - /// - /// The size of this map decoration as computed/assigned previously - /// - protected Size _cachedSize; - /// - /// The bounding rectangle around the map decoration - /// - protected Rectangle _boundingRectangle; - - /// - /// Creates an instance of this class. - /// - protected MapDecoration() - { - BackgroundColor = Color.Transparent; - Enabled = true; - Opacity = 1; - Location = new Point(5, 5); - Padding = new Size(3, 3); - Anchor = MapDecorationAnchor.RightBottom; - - } - - /// - /// Gets or sets enabled status - /// - public bool Enabled { get; set; } - - - #region Position - - /// - /// The anchor of the map Decoration - /// - public MapDecorationAnchor Anchor { get; set; } - - /// - /// The point that defines the location - /// - public Point Location { get; set; } - - /// - /// Returns the left-top location of the Map decoration - /// - /// - /// - private Point GetLocation(Map map) - { - var clipRect = map.Size; - var objectSize = Size; - - var offsetX = Location.X; - var offsetY = Location.Y; - - var anchors = (MapDecorationAnchorFlags)Anchor; - switch (anchors & MapDecorationAnchorFlags.Horizontal) - { - case MapDecorationAnchorFlags.Right: - offsetX = clipRect.Width - (Location.X + objectSize.Width); - break; - case MapDecorationAnchorFlags.HorizontalCenter: - offsetX = (clipRect.Width - (Location.X + objectSize.Width)) / 2; - break; - } - - switch (anchors & MapDecorationAnchorFlags.Vertical) - { - case MapDecorationAnchorFlags.Bottom: - offsetY = clipRect.Height - (Location.Y + objectSize.Height); - break; - case MapDecorationAnchorFlags.HorizontalCenter: - offsetY = (clipRect.Height - (Location.Y + objectSize.Height)) / 2; - break; - } - - return new Point(offsetX, offsetY); - } - - - /// - /// Gets or sets the Padding of the map decoration - /// - public Size Padding { get; set; } - - #endregion - - /// - /// Function to compute an transparent color by combining with . - /// - /// The base color - /// The (semi) transparent color - protected Color OpacityColor(Color color) - { - if (color.A != 255) - return color; - - return Color.FromArgb((int)(_opacity * 255), color); - } - - /// - /// Gets or sets the background color for the map decoration - /// - public Color BackgroundColor { get; set; } - - private float _opacity; - - /// - /// Gets or sets the opacity of map decoration - /// - public float Opacity - { - get { return _opacity; } - set - { - if (value < 0) value = 0; - if (value > 1) value = 1; - _opacity = value; - } - } - - #region Appearance Border - - /// - /// The margin between decoration and border - /// - public Size BorderMargin { get; set; } - - /// - /// Gets or sets the color of the border - /// - public Color BorderColor { get; set; } - - /// - /// Gets or sets the width of the border - /// - public int BorderWidth { get; set; } - - /// - /// Gets or sets whether the border should be rendered with rounded edges - /// - public bool RoundedEdges { get; set; } - -#endregion - - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// The graphics object - /// The map - /// The size of the map decoration - protected abstract Size InternalSize(Graphics g, Map map); - - private void CalcMapDecorationMetrics(Graphics g, Map map) - { - _cachedSize = InternalSize(g, map); - var rect = new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize); - _boundingRectangle = Rectangle.Inflate(rect, 2 * BorderMargin.Width, 2 * BorderMargin.Height); - } - - private Size Size - { - get { return Size.Add(_cachedSize, Size.Add(BorderMargin, BorderMargin)); } - } - - private Region GetClipRegion(Map map) - { - return new Region(new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize)); - } - - private static GraphicsPath CreateRoundedRectangle(Rectangle rectangle, Size margin) - { - var gp = new GraphicsPath(); - - //metrics - int x1 = rectangle.Left + margin.Width; - int x2 = rectangle.Right - margin.Width; - int y1 = rectangle.Top + margin.Height; - int y2 = rectangle.Bottom - margin.Height; - - int arcWidth = 2*margin.Width; - int arcHeight = 2*margin.Height; - - if (arcWidth > 0 && arcHeight > 0) - { - - gp.AddLine(x1, rectangle.Top, x2, rectangle.Top); - gp.AddArc(x2 - margin.Width, rectangle.Top, arcWidth, arcHeight, 270, 90); - gp.AddLine(rectangle.Right, y1, rectangle.Right, y2); - gp.AddArc(x2 - margin.Width, y2 - margin.Height, arcWidth, arcHeight, 0, 90); - gp.AddLine(x2, rectangle.Bottom, x1, rectangle.Bottom); - gp.AddArc(rectangle.Left, y2 - margin.Height, arcWidth, arcHeight, 90, 90); - gp.AddLine(rectangle.Left, y2, rectangle.Left, y1); - gp.AddArc(rectangle.Left, rectangle.Top, arcWidth, arcWidth, 180, 90); - - gp.CloseFigure(); - } - else - gp.AddRectangle(rectangle); - return gp; - } - - /// - /// - /// - /// - /// - public void Render(Graphics g, Map map) - { - //Is this map decoration enabled? - if (!Enabled) - return; - - //Preparing rendering - OnRendering(g, map); - - //Draw border - GraphicsPath gp; - if (RoundedEdges && !BorderMargin.IsEmpty) - gp = CreateRoundedRectangle(_boundingRectangle, BorderMargin); - else - { - gp = new GraphicsPath(); - gp.AddRectangle(_boundingRectangle); - } - g.DrawPath(new Pen(OpacityColor(BorderColor), BorderWidth), gp); - g.FillPath(new SolidBrush(OpacityColor(BackgroundColor)), gp); - - //Clip region - var oldClip = g.Clip; - g.Clip = GetClipRegion(map); - - //Actually render the Decoration - OnRender(g, map); - - //Restore old clip region - g.Clip = oldClip; - - - //Finished rendering - OnRendered(g, map); - } - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected virtual void OnRender(Graphics g, Map map) - { - } - /// - /// Function to render the actual map decoration - /// - /// - /// - protected virtual void OnRendering(Graphics g, Map map) - { - CalcMapDecorationMetrics(g, map); - } - /// - /// Function to render the actual map decoration - /// - /// - /// - protected virtual void OnRendered(Graphics g, Map map) - { - } - } -} \ No newline at end of file +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace SharpMap.Rendering.Decoration +{ + // ReSharper disable InconsistentNaming + /// + /// Abstract base class for all map decorations. + /// + /// Handles framing and positioning of the decoration + /// + /// + [Serializable] + public abstract class MapDecoration : /* Component, */IMapDecoration + { + /// + /// The size of this map decoration as computed/assigned previously + /// + protected Size _cachedSize; + /// + /// The bounding rectangle around the map decoration + /// + protected Rectangle _boundingRectangle; + + /// + /// Creates an instance of this class. + /// + protected MapDecoration() + { + BackgroundColor = Color.Transparent; + Enabled = true; + Opacity = 1; + Location = new Point(5, 5); + Padding = new Size(3, 3); + Anchor = MapDecorationAnchor.RightBottom; + + } + + /// + /// Gets or sets enabled status + /// + public bool Enabled { get; set; } + + + #region Position + + /// + /// The anchor of the map Decoration + /// + public MapDecorationAnchor Anchor { get; set; } + + /// + /// The point that defines the location + /// + public Point Location { get; set; } + + /// + /// Returns the left-top location of the Map decoration + /// + /// + /// + private Point GetLocation(Map map) + { + var clipRect = map.Size; + var objectSize = Size; + + var offsetX = Location.X; + var offsetY = Location.Y; + + var anchors = (MapDecorationAnchorFlags)Anchor; + switch (anchors & MapDecorationAnchorFlags.Horizontal) + { + case MapDecorationAnchorFlags.Right: + offsetX = clipRect.Width - (Location.X + objectSize.Width); + break; + case MapDecorationAnchorFlags.HorizontalCenter: + offsetX = (clipRect.Width - (Location.X + objectSize.Width)) / 2; + break; + } + + switch (anchors & MapDecorationAnchorFlags.Vertical) + { + case MapDecorationAnchorFlags.Bottom: + offsetY = clipRect.Height - (Location.Y + objectSize.Height); + break; + case MapDecorationAnchorFlags.VerticalCenter: + offsetY = (clipRect.Height - (Location.Y + objectSize.Height)) / 2; + break; + } + + return new Point(offsetX, offsetY); + } + + + /// + /// Gets or sets the Padding of the map decoration + /// + public Size Padding { get; set; } + + #endregion + + /// + /// Function to compute an transparent color by combining with . + /// + /// The base color + /// The (semi) transparent color + protected Color OpacityColor(Color color) + { + if (color.A != 255) + return color; + + return Color.FromArgb((int)(_opacity * 255), color); + } + + /// + /// Gets or sets the background color for the map decoration + /// + public Color BackgroundColor { get; set; } + + private float _opacity; + + /// + /// Gets or sets the opacity of map decoration + /// + public float Opacity + { + get { return _opacity; } + set + { + if (value < 0) value = 0; + if (value > 1) value = 1; + _opacity = value; + } + } + + #region Appearance Border + + /// + /// The margin between decoration and border + /// + public Size BorderMargin { get; set; } + + /// + /// Gets or sets the color of the border + /// + public Color BorderColor { get; set; } + + /// + /// Gets or sets the width of the border + /// + public int BorderWidth { get; set; } + + /// + /// Gets or sets whether the border should be rendered with rounded edges + /// + public bool RoundedEdges { get; set; } + +#endregion + + /// + /// Function to compute the required size for rendering the map decoration object + /// This is just the size of the decoration object, border settings are excluded + /// + /// The graphics object + /// The map + /// The size of the map decoration + protected abstract Size InternalSize(Graphics g, Map map); + + private void CalcMapDecorationMetrics(Graphics g, Map map) + { + _cachedSize = InternalSize(g, map); + var rect = new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize); + _boundingRectangle = Rectangle.Inflate(rect, 2 * BorderMargin.Width, 2 * BorderMargin.Height); + } + + private Size Size + { + get { return Size.Add(_cachedSize, Size.Add(BorderMargin, BorderMargin)); } + } + + private Region GetClipRegion(Map map) + { + return new Region(new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize)); + } + + private static GraphicsPath CreateRoundedRectangle(Rectangle rectangle, Size margin) + { + var gp = new GraphicsPath(); + + //metrics + int x1 = rectangle.Left + margin.Width; + int x2 = rectangle.Right - margin.Width; + int y1 = rectangle.Top + margin.Height; + int y2 = rectangle.Bottom - margin.Height; + + int arcWidth = 2*margin.Width; + int arcHeight = 2*margin.Height; + + if (arcWidth > 0 && arcHeight > 0) + { + + gp.AddLine(x1, rectangle.Top, x2, rectangle.Top); + gp.AddArc(x2 - margin.Width, rectangle.Top, arcWidth, arcHeight, 270, 90); + gp.AddLine(rectangle.Right, y1, rectangle.Right, y2); + gp.AddArc(x2 - margin.Width, y2 - margin.Height, arcWidth, arcHeight, 0, 90); + gp.AddLine(x2, rectangle.Bottom, x1, rectangle.Bottom); + gp.AddArc(rectangle.Left, y2 - margin.Height, arcWidth, arcHeight, 90, 90); + gp.AddLine(rectangle.Left, y2, rectangle.Left, y1); + gp.AddArc(rectangle.Left, rectangle.Top, arcWidth, arcWidth, 180, 90); + + gp.CloseFigure(); + } + else + gp.AddRectangle(rectangle); + return gp; + } + + /// + /// + /// + /// + /// + public void Render(Graphics g, Map map) + { + //Is this map decoration enabled? + if (!Enabled) + return; + + //Preparing rendering + OnRendering(g, map); + + //Draw border + GraphicsPath gp; + if (RoundedEdges && !BorderMargin.IsEmpty) + gp = CreateRoundedRectangle(_boundingRectangle, BorderMargin); + else + { + gp = new GraphicsPath(); + gp.AddRectangle(_boundingRectangle); + } + g.DrawPath(new Pen(OpacityColor(BorderColor), BorderWidth), gp); + g.FillPath(new SolidBrush(OpacityColor(BackgroundColor)), gp); + + //Clip region + var oldClip = g.Clip; + g.Clip = GetClipRegion(map); + + //Actually render the Decoration + OnRender(g, map); + + //Restore old clip region + g.Clip = oldClip; + + + //Finished rendering + OnRendered(g, map); + } + + /// + /// Function to render the actual map decoration + /// + /// + /// + protected virtual void OnRender(Graphics g, Map map) + { + } + /// + /// Function to render the actual map decoration + /// + /// + /// + protected virtual void OnRendering(Graphics g, Map map) + { + CalcMapDecorationMetrics(g, map); + } + /// + /// Function to render the actual map decoration + /// + /// + /// + protected virtual void OnRendered(Graphics g, Map map) + { + } + } +} diff --git a/SharpMap/Rendering/Decoration/MapDecorationAnchor.cs b/SharpMap/Rendering/Decoration/MapDecorationAnchor.cs index 3f0657de..18e4a1bc 100644 --- a/SharpMap/Rendering/Decoration/MapDecorationAnchor.cs +++ b/SharpMap/Rendering/Decoration/MapDecorationAnchor.cs @@ -1,58 +1,58 @@ -namespace SharpMap.Rendering.Decoration -{ - /// - /// Anchor relative position - /// - public enum MapDecorationAnchor - { - /// - /// Default anchor position, . - /// - Default = RightBottom, - - /// - /// Left top - /// - LeftTop = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top, - - /// - /// Left center - /// - LeftCenter = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.VerticalCenter, - - /// - /// Left bottom - /// - LeftBottom = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Bottom, - - /// - /// Right top - /// - RightTop = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Top, - - /// - /// Right bottom - /// - RightBottom = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, - - /// - /// Right center - /// - RightCenter = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.VerticalCenter, - - /// - /// Center top - /// - CenterTop = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.Top, - - /// - /// Right bottom - /// - CenterBottom = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.Bottom, - - /// - /// Right center - /// - Center = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.VerticalCenter, - } -} \ No newline at end of file +namespace SharpMap.Rendering.Decoration +{ + /// + /// Anchor relative position + /// + public enum MapDecorationAnchor + { + /// + /// Default anchor position, . + /// + Default = RightBottom, + + /// + /// Left top + /// + LeftTop = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top, + + /// + /// Left center + /// + LeftCenter = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.VerticalCenter, + + /// + /// Left bottom + /// + LeftBottom = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Bottom, + + /// + /// Right top + /// + RightTop = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Top, + + /// + /// Right bottom + /// + RightBottom = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, + + /// + /// Right center + /// + RightCenter = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.VerticalCenter, + + /// + /// Center top + /// + CenterTop = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.Top, + + /// + /// Center bottom + /// + CenterBottom = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.Bottom, + + /// + /// Center + /// + Center = MapDecorationAnchorFlags.HorizontalCenter | MapDecorationAnchorFlags.VerticalCenter, + } +} diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index 8a5796f7..8e153b10 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -1,1222 +1,1241 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using SharpMap.Utilities; - -namespace SharpMap.Rendering.Decoration.ScaleBar -{ - /* - Description : Implement the Control interfaces. - Developer : Simen - Contact : SimenWu@hotmail.com - Last Modified: 03/03/2003 - - April 2018 : Add support for large and small units with auto switching depending on map scale - : Change unit factor for Degrees; add new unit Nautical Mile - : Tweak label text placement - : Tweak calcs when MapUnits = degrees -*/ - - /// - /// Scale Bar map decoration - /// - [Serializable] - public class ScaleBar : MapDecoration - { - #region Constants - - private const int PowerRangeMin = -5; - private const int PowerRangeMax = 10; - private const int NiceNumber = 4; - private const int DefaultBarWidth = 9; - private static readonly double[] NiceNumberArray = { 1, 2, 2.5, 5 }; - private const int ScalePrecisionDigits = 5; - private const int GapScaleTextToBar = 3; - private const int GapBarToSegmentText = 1; - - private const bool DefaultBarOutline = true; - - private static readonly Color DefaultForeColor = Color.Black; - private static readonly Color DefaultBarOutlineCr = Color.Black; - private static readonly Color DefaultBarColor1 = Color.Red; - private static readonly Color DefaultBarColor2 = Color.White; - - private const int DefaultNumTics = 4; - private const int DefaultMarginX = 8; - private const int DefaultWidth = 180; - - private const double VerySmall = 0.0000001; - #endregion - - private static readonly Dictionary Units = new Dictionary(); - - static ScaleBar() - { - Units.Add((int)Unit.Custom, new UnitInfo((int)Unit.Custom, 1.0, "Unknown", "Unknown")); - Units.Add((int)Unit.Meter, new UnitInfo((int)Unit.Meter, 1, "Meter", "m")); - Units.Add((int)Unit.Foot_US, new UnitInfo((int)Unit.Foot_US, 0.30480061, "Foot_US", "ft")); - Units.Add((int)Unit.Yard_Sears, new UnitInfo((int)Unit.Yard_Sears, 0.914398415, "Yards", "yard")); - Units.Add((int)Unit.Yard_Indian, new UnitInfo((int)Unit.Yard_Indian, 0.914398531, "Yards", "Unknown")); - Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Mile_US, 1609.347219, "Miles", "mi")); - Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Kilometer, 1000.0, "Kilometers", "km")); - Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Degree, GeoSpatialMath.MetersPerDegreeAtEquator, "Degree", "d")); - Units.Add((int)Unit.Nautical_Mile, new UnitInfo((int)Unit.Nautical_Mile, 1852, "Nautical Mile", "NM")); - } - - /// - /// Creates an instance of this class - /// - public ScaleBar() - { - MapUnit = (int)Unit.Meter; - BarUnitLargeScale = (int)Unit.Meter; - BarUnitSmallScale = (int)Unit.Kilometer; - Scale = 1; - Width = DefaultWidth; - } - - private Color _barColor1 = DefaultBarColor1; - private Color _barColor2 = DefaultBarColor2; - - //unit - private int _mapUnit = (int)Unit.Meter; //defaultMapUnit; - private int _obsBarUnit = (int)Unit.Meter; - private int _barUnit = (int)Unit.Meter; //defaultScaleBarUnit; - private int _barUnitLargeScale = (int)Unit.Meter; //defaultScaleBarUnit; - private int _barUnitSmallScale = (int)Unit.Kilometer; //defaultScaleBarUnit; - - //scale - private double _scale; //Initial scale. - private double _mapWidth; - private int _pageWidth; - private double _lon1; - private double _lon2; - private double _lat; - private bool _forceRecalc; - - //bar - private int _numTics = DefaultNumTics; - private bool _barOutline = DefaultBarOutline; - private Color _barOutlineColor = DefaultBarOutlineCr; - private int _barWidth = DefaultBarWidth; - private ScaleBarLabelText _barLabelText = ScaleBarLabelText.RepresentativeFraction; - private ScaleBarStyle _barStyle = ScaleBarStyle.Standard; - - ////control - //private bool m_bTransparentBG; - //private bool m_bFormatNumber; - - // Create a default font to use with this control. - private Color _foreColor = DefaultForeColor; - private Font _font = (Font)SystemFonts.DefaultFont.Clone(); - - private int _marginLeft = DefaultMarginX; //left margin for the scale bar - private int _marginRight = DefaultMarginX; //right margin for the scale bar - - #region MapDecoration overrides - - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// The graphics object - /// The map - /// The size of the map decoration - protected override Size InternalSize(Graphics g, Map map) - { - CalcScale((int)g.DpiX); - double width = MarginLeft + MarginRight + DefaultWidth; - double height = 2 * BarWidth + 2 * _font.Height; - return new Size((int)width, (int)height); - } - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected override void OnRender(Graphics g, Map map) - { - if (!this.Enabled) - return; - var rectF = g.ClipBounds; - - if (MapUnit == (int)Unit.Degree) - { - var p1 = map.ImageToWorld(new PointF(0, map.Size.Height * 0.5f)); - var p2 = map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height * 0.5f)); - SetScaleD((int)g.DpiX, p1.X, p2.X, p1.Y, map.Size.Width); - } - else - SetScale((int)g.DpiX, map.Envelope.Width, map.Size.Width); - - var rect = new Rectangle(Point.Truncate(rectF.Location), Size.Truncate(rectF.Size)); - RenderScaleBar(g, rect); - } - - #endregion - - #region Private render methods - - private void RenderScaleBar(Graphics g, Rectangle rc) - { - int width = rc.Right - rc.Left; - int height = rc.Bottom - rc.Top; - int pixelsPerTic; - - double scaleBarUnitsPerTick; - - //if (!m_bTransparentBG) RenderBackground(g, rc); - //if (_borderVisible && m_nBorderWidth > 0) RenderBorder(g, rc); - - //Get the scale first. - if (_scale < VerySmall) - return; //return if the scale is just too small - - ////Initialize the locale. So the we can use the latest locale setting to show the numbers. - //m_locale.Init(); - - //Draw the bar. - CalcLargeOrSmallUnit((int)g.DpiX, width, _numTics, _scale, _barUnitFactor, out pixelsPerTic, - out scaleBarUnitsPerTick); - int nOffsetX = (width - _numTics * pixelsPerTic - _marginLeft - _marginRight) / 2 + _marginLeft; - //left margin - int nOffsetY = (height - _barWidth) / 2; - RenderBar(g, pixelsPerTic, rc.Left + nOffsetX, rc.Top + nOffsetY); - RenderVerbalScale(g, rc.Left + width / 2, rc.Top + nOffsetY - GapScaleTextToBar); - RenderSegmentText(g, rc.Left + nOffsetX, rc.Top + nOffsetY + _barWidth + GapBarToSegmentText, _numTics, pixelsPerTic, - scaleBarUnitsPerTick, - _barUnitShortName); - Dirty = false; - } - - /// - /// Render the bar - /// - /// The graphics object - /// The length of each tic - /// The x-offset - /// The y-offset - private void RenderBar(Graphics g, int nTicLength, int nOffsetX, int nOffsetY) - { - Color cr1 = OpacityColor(_barColor1); - Color cr2 = OpacityColor(_barColor2); - Color crOutline = OpacityColor(_barOutlineColor); - - RenderBarWithStyle(g, nOffsetX, nOffsetY, _numTics, nTicLength, _barWidth, cr1, cr2, _barOutline, - crOutline, _barStyle); - } - - /// - /// Render the bar with Style. - /// - /// The graphics object - /// The x-offset - /// The y-offset - /// The number of tics - /// The length of each tic - /// The width of the bar - /// The first bar color - /// The second bar color - /// Value indicating whether the bar should be outlined - /// The outline color - /// The - private static void RenderBarWithStyle(Graphics g, int nOffsetX, int nOffsetY, int nNumTics, int nTicLength, - int nBarWidth, - Color crBar1, Color crBar2, bool bOutline, Color crOutline, - ScaleBarStyle style) - { - if (nBarWidth > 1) - { - switch (style) - { - case ScaleBarStyle.Standard: - RenderTicBarStandard(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, - bOutline, crOutline); - break; - case ScaleBarStyle.Meridian: - RenderTicBarMeridian(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, - bOutline, crOutline); - break; - case ScaleBarStyle.Meridian1: - RenderTicBarMeridian1(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, - bOutline, crOutline); - break; - default: - RenderTicBarStandard(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, - bOutline, crOutline); - break; - } - } - else - RenderTicLine(g, nNumTics, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY); - } - - /// - /// Render just the tic line - /// - /// The graphics object - /// The number of tics - /// The first bar color - /// The second bar color - /// The length of each tic - /// The x-origin - /// The y-origin - private static void RenderTicLine(Graphics g, int nNumTics, Color crBar1, Color crBar2, int nTicLength, - int xOrigin, int yOrigin) - { - var pen1 = new Pen(crBar1, 1); - var pen2 = new Pen(crBar2, 1); - - int x = xOrigin; - int y = yOrigin; - for (int i = 0; i < nNumTics; i++) - { - g.DrawLine(i % 2 != 0 ? pen2 : pen1, x, y, x + nTicLength, y); - x += nTicLength; - } - } - - /// - /// Render the bar with Style. - /// - /// The graphics object - /// The x-offset - /// The y-offset - /// The number of tics - /// The length of each tic - /// The width of the bar - /// The first bar color - /// The second bar color - /// Value indicating whether the bar should be outlined - /// The outline color - private static void RenderTicBarStandard(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, - int nTicLength, int xOrigin, int yOrigin, bool bOutline, - Color crOutline) - { - Color cr1, cr2; - - //Create pens. - if (bOutline) - { - cr1 = crOutline; - cr2 = crOutline; - } - else - { - cr1 = crBar1; - cr2 = crBar2; - } - var pen1 = new Pen(cr1, 1); - var pen2 = new Pen(cr2, 1); - - //Create brushes. - Brush brush1 = new SolidBrush(crBar1); - Brush brush2 = new SolidBrush(crBar2); - - int x = xOrigin; - int y1 = yOrigin; - /* - int y2 = y1 + nWidth; - */ - for (int i = 0; i < nNumTics; i++) - { - if (i % 2 == 1) - RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen1, brush1); - else - RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen2, brush2); - - x += nTicLength; - } - } - - private static void RenderRectangle(Graphics g, int x, int y, int width, int height, Pen pen, Brush brush) - { - if (brush != null) - g.FillRectangle(brush, x, y, width, height); - g.DrawRectangle(pen, x, y, width, height); - } - - /// - /// Render the bar with Style. - /// - /// The graphics object - /// The x-offset - /// The y-offset - /// The number of tics - /// The length of each tic - /// The width of the bar - /// The first bar color - /// The second bar color - /// Value indicating whether the bar should be outlined - /// The outline color - private static void RenderTicBarMeridian(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, - int nTicLength, int xOrigin, int yOrigin, bool bOutline, - Color crOutline) - { - Color cr1, cr2; - //Create pens. - if (bOutline) - { - cr1 = crOutline; - cr2 = crOutline; - } - else - { - cr1 = crBar1; - cr2 = crBar2; - } - var pen1 = new Pen(cr1, 1); - var pen2 = new Pen(cr2, 1); - - //Create brushes. - Brush brush1 = new SolidBrush(crBar1); - Brush brush2 = new SolidBrush(crBar2); - - int x = xOrigin; - int y1 = yOrigin; - //int y2 = y1 + nWidth; - int y12 = y1 + nBarWidth / 2; - int widthHalf = nBarWidth / 2 + 1; - for (int i = 0; i < nNumTics; i++) - { - if (i % 2 == 1) - { - RenderRectangle(g, x, y1, nTicLength + 1, widthHalf, pen2, brush2); - RenderRectangle(g, x, y12, nTicLength + 1, widthHalf, pen1, brush1); - } - else - { - RenderRectangle(g, x, y1, nTicLength + 1, widthHalf, pen1, brush1); - RenderRectangle(g, x, y12, nTicLength + 1, widthHalf, pen2, brush2); - } - x += nTicLength; - } - } - - /// - /// Render the bar with Style. - /// - /// The graphics object - /// The x-offset - /// The y-offset - /// The number of tics - /// The length of each tic - /// The width of the bar - /// The first bar color - /// The second bar color - /// Value indicating whether the bar should be outlined - /// The outline color - private static void RenderTicBarMeridian1(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, - int nTicLength, int xOrigin, int yOrigin, bool bOutline, - Color crOutline) - { - Color cr1, cr2; - //Create pens. - if (bOutline) - { - cr1 = crOutline; - cr2 = crOutline; - } - else - { - cr1 = crBar1; - cr2 = crBar2; - } - Pen pen1 = new Pen(cr1, 1); - Pen pen2 = new Pen(cr2, 1); - - //Create brushes. - Brush brush1 = new SolidBrush(crBar1); - Brush brush2 = new SolidBrush(crBar2); - - int x = xOrigin; - int y1 = yOrigin; - //int y2 = y1 + nWidth; - int y12 = y1 + nBarWidth / 2; - int widthHalf = nBarWidth / 2; - for (int i = 0; i < nNumTics; i++) - { - if (i % 2 == 1) - { - RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen2, brush2); - } - else - { - RenderRectangle(g, x, y1, nTicLength + 1, widthHalf + 1, pen1, brush1); - RenderRectangle(g, x, y12, nTicLength + 1, widthHalf + 1, pen1, brush1); - } - x += nTicLength; - } - } - - - #endregion - - /// - /// Renders the verbal text above the scale bar. - /// - /// The graphics object - /// x-ordinate of the reference point for the text, the center of the bar - /// y-ordinate of the reference point for the text, the top or the bar - private void RenderVerbalScale(Graphics g, int x, int y) - { - int lastX = int.MinValue; - //Get the scale text. - var sbText = ScaleBarText(_scale, _barLabelText); - //Draw the text. - RenderTextWithFormat(g, sbText, x, y, - new StringFormat - { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far }, ref lastX); - } - - private static readonly StringFormat TopCenter = - new StringFormat - { - LineAlignment = StringAlignment.Near, - Alignment = StringAlignment.Center - }; - - /// - /// Renders the segment text below the scale bar - /// - /// The graphics object - /// The x-ordinate of the reference point for the segment text, the beginning of the bar - /// The y-ordinate of the reference point for the segment text, the bottom of the bar - /// The number of tics - /// The width of each tic in pixels - /// The scale bar units per tic - /// The abbreviated unit text - private void RenderSegmentText(Graphics g, int x, int y, int tics, int ticWidth, double scaleBarUnitsPerTic, - string strUnit) - { - int lastX = int.MinValue; - string text; - int size; - int endX; - int offsetX; - - //Make sure this text is not overdrawn... (previously km could be partially truncated) - text = (_barLabelText == ScaleBarLabelText.JustUnits ? "0" : strUnit); - size = MeasureDisplayStringWidthExact(g, text, _font); - offsetX = 0; - if (x - size / 2f < _boundingRectangle.Left) - { - offsetX = _boundingRectangle.Left + (int)Math.Ceiling(size / 2f) - x; - } - RenderTextWithFormat(g, text, x + offsetX, y, TopCenter, ref lastX); - - lastX = int.MinValue; - //Set the output format. - int precision = PrecisionOfSegmentText(scaleBarUnitsPerTic); - string format = String.Format("F{0}", precision); - - for (int i = 1; i <= tics; i++) - { - double value = scaleBarUnitsPerTic * i; - text = value.ToString(format, System.Globalization.CultureInfo.CurrentUICulture); - offsetX = 0; - if (i == tics) - { - //Make sure this text is not overdrawn... (should be aligned with ticmark) - size = MeasureDisplayStringWidthExact(g, text, _font); - endX = x + ticWidth * i + (int)Math.Ceiling(size / 2f); - if (endX > _boundingRectangle.Right) - { - offsetX = _boundingRectangle.Right - endX; - } - - } - - RenderTextWithFormat(g, text, x + ticWidth * i + offsetX, y, TopCenter, ref lastX); - } - } - - /// - /// Renders the text - /// - /// The graphics object - /// The text to render - /// The x-ordinate of the reference point - /// The y-ordinate of the reference point - /// The string format, mainly vertical an horizontal alignment are of interest. - /// The last horizontal position, to ensure that texts are not overlapping - private void RenderTextWithFormat(Graphics g, string text, int x, int y, StringFormat format, ref int lastX) - { - //Get the size of the string - var size = g.MeasureString(text, _font); - switch (format.Alignment) - { - case StringAlignment.Far: - if (x - size.Width < lastX) return; - break; - case StringAlignment.Center: - if (x - size.Width / 2 < lastX) return; - break; - case StringAlignment.Near: - if (x < lastX) return; - break; - } - - //Output the text. - g.DrawString(text, _font, new SolidBrush(OpacityColor(_foreColor)), new Point(x, y), format); - - //Keep track of latest x position. - switch (format.Alignment) - { - case StringAlignment.Far: - lastX = x + (int)size.Width; - break; - case StringAlignment.Center: - lastX = x + (int)(size.Width / 2); - break; - case StringAlignment.Near: - lastX = x; - break; - } - } - - /// - /// Calculate the scale and store it in . - /// - /// It should be called to calculate the real map scale everytime the user change mapunit or set the scale - /// - /// - private void CalcScale(int dpi) - { - double fScale; - if (_mapUnit == (int)Unit.Degree) //LatLong - fScale = ScaleCalculations.CalculateScaleLatLong(_lon1, _lon2, _lat, _pageWidth, dpi); - else - fScale = ScaleCalculations.CalculateScaleNonLatLong(_mapWidth, _pageWidth, _mapUnitFactor, dpi); - _scale = fScale; - } - - /// - /// Gets or sets the foreground color, used to render the labeling - /// - public Color ForeColor - { - get { return _foreColor; } - set - { - _foreColor = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the font to label the bar - /// - public Font Font - { - get { return _font; } - set - { - if (value == null) - return; - _font = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the first bar color - /// - public Color BarColor1 - { - get { return _barColor1; } - set - { - _barColor1 = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the second bar color - /// - public Color BarColor2 - { - get { return _barColor2; } - set - { - _barColor2 = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the bar width - /// - public int BarWidth - { - get { return _barWidth; } - set - { - if (value < 1) value = 1; - _barWidth = value; - OnViewChanged(); - Dirty = true; - } - } - - private double _mapUnitFactor; - private string _mapUnitName, _mapUnitShortName; - - /// - /// Factors derived internally from BarUnit(s) - /// - private double _barUnitFactor; - private double _barUnitFactorLargeScale; - private double _barUnitFactorSmallScale; - - private string _barUnitName, _barUnitShortName; - private string _barUnitNameLargeScale, _barUnitShortNameLargeScale; - private string _barUnitNameSmallScale, _barUnitShortNameSmallScale; - - /// - /// Map unit - /// - public int MapUnit - { - get { return _mapUnit; } - set - { - _mapUnit = value; - GetUnitInformation(_mapUnit, out _mapUnitFactor, out _mapUnitName, out _mapUnitShortName); - CalcScale(96); - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Bar unit - /// - [Obsolete("Use BarUnitLargeScale and BarUnitSmallScale")] - public int BarUnit - { - get { return _obsBarUnit; } - set - { - //_barUnit = value; - //GetUnitInformation(_barUnit, out _barUnitFactor, out _barUnitName, out _barUnitShortName); - //CalcScale(96); - //OnViewChanged(); - //Dirty = true; - - _obsBarUnit = value; - - if (Units.TryGetValue(value, out UnitInfo unitInfo)) - { - switch ((Unit)value) - { - case Unit.Meter: - case Unit.Kilometer: - case Unit.Nautical_Mile: - { - BarUnitLargeScale = (int)Unit.Meter; - BarUnitSmallScale = (int)Unit.Kilometer; - return; - } - - case Unit.Foot_US: - case Unit.Yard_Indian: - case Unit.Yard_Sears: - { - BarUnitLargeScale = value; - BarUnitSmallScale = (int)Unit.Mile_US; - return; - } - - case Unit.Mile_US: - { - BarUnitLargeScale = (int)Unit.Yard_Sears; - BarUnitSmallScale = (int)Unit.Mile_US; - return; - } - - case Unit.Degree: - { - BarUnitLargeScale = (int)Unit.Degree; - BarUnitSmallScale = (int)Unit.Degree; - return; - } - - default: - { - BarUnitLargeScale = (int)Unit.Custom; - BarUnitSmallScale = (int)Unit.Custom; - return; - } - } - } - else - { - BarUnitLargeScale = (int)Unit.Custom; - BarUnitSmallScale = (int)Unit.Custom; - return; - } - } - } - - /// - /// Bar Unit for use at large scales (small area) such as ft, m, or yd. - /// - public int BarUnitLargeScale - { - get { return _barUnitLargeScale; } - set - { - GetUnitInformation(value, out double d, out _barUnitNameLargeScale, out _barUnitShortNameLargeScale); - - _barUnitLargeScale = value; - _barUnitFactorLargeScale = d; - _forceRecalc = true; - CalcScale(96); - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Bar Unit for use at small scales (large area) such as km, mile, NM, Deg. - /// - public int BarUnitSmallScale - { - get { return _barUnitSmallScale; } - set - { - GetUnitInformation(value, out double d, out _barUnitNameSmallScale, out _barUnitShortNameSmallScale); - - _barUnitSmallScale = value; - _barUnitFactorSmallScale = d; - _forceRecalc = true; - CalcScale(96); - OnViewChanged(); - Dirty = true; - } - } - private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, - out string mapUnitShortName) - { - UnitInfo unitInfo; - if (Units.TryGetValue(mapUnit, out unitInfo)) - { - mapUnitFactor = unitInfo.ToMeter; - mapUnitName = unitInfo.Name; - mapUnitShortName = unitInfo.Abbreviation; - } - else - { - mapUnitFactor = 1; - mapUnitName = "Custom"; - mapUnitShortName = string.Empty; - } - } - - - /// - /// Bar outline - /// - public bool BarOutline - { - get { return _barOutline; } - set - { - _barOutline = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Bar outline color - /// - public Color BarOutlineColor - { - get { return _barOutlineColor; } - set - { - _barOutlineColor = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Scale - /// - public double Scale - { - get { return _scale; } - set - { - _scale = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// - /// - /// - /// - /// - public void SetCustomUnit(double factor, string name, string shortName) - { - //If the user wants to use customer unit, then the map unit and the bar unit will be the same - //Map Unit - if (factor <= 0.0) //factor should be >0 - factor = 1.0; - _mapUnitFactor = factor; - _mapUnitName = name; - _mapUnitShortName = shortName; - - //Bar Unit - //_barUnitFactor = factor; - //_barUnitName = name; - //_barUnitShortName = shortName; - - _barUnitLargeScale = (int)Unit.Custom; - _barUnitFactorLargeScale = factor; - _barUnitNameLargeScale = name; - _barUnitShortNameLargeScale = shortName; - - _barUnitSmallScale = (int)Unit.Custom; - _barUnitFactorSmallScale = factor; - _barUnitNameSmallScale = name; - _barUnitShortNameSmallScale = shortName; - - _forceRecalc = true; - CalcScale(96); - OnViewChanged(); - } - - /* - private void GetMapUnitInfo(out double factor, out string name, out string shortName) - { - factor = _mapUnitFactor; - name = _mapUnitName; - shortName = _mapUnitShortName; - } - - private void GetBarUnitInfo(out double factor, out string name, out string shortName) - { - factor = _barUnitFactor; - name = _barUnitName; - shortName = _barUnitShortName; - } - */ - - private void SetScaleD(int dpi, double lon1, double lon2, double lat, int widthInPixel) - { - _lon1 = lon1; - _lon2 = lon2; - _lat = lat; - _pageWidth = widthInPixel; - CalcScale(dpi); - OnViewChanged(); - } - - private void SetScale(int dpi, double mapWidth, int widthInPixel) - { - _mapWidth = mapWidth; - _pageWidth = widthInPixel; - CalcScale(dpi); - OnViewChanged(); - } - - /// - /// Gets or sets the number of ticks - /// - public int NumTicks - { - get { return _numTics; } - set - { - if (value < 1) value = 1; - _numTics = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the labeling for the bar - /// - public ScaleBarLabelText ScaleText - { - get { return _barLabelText; } - set - { - _barLabelText = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the width of the scale bar - /// - public int Width { get; set; } - - private string ScaleBarText(double scale, ScaleBarLabelText scaleText) - { - switch (scaleText) - { - case ScaleBarLabelText.NoText: - return string.Empty; - case ScaleBarLabelText.JustUnits: - return _barUnitName; - default: - var precision = 0; - - //set the precision. Keep the first 5 (ScalePrecisionDigits) digits. - if (scale > 0) - { - var magnitude = (int)(Math.Log10(scale)); - precision = ScalePrecisionDigits - magnitude; - if (precision < 0) - precision = 0; - if (magnitude >= 2) - //don't show the precision if the scale is less than than 1:100 (e.g. 1:1000) - precision = 0; - - } - var format = string.Format("N{0}", precision); - - scale = FormatRealScale(scale); - return "1 : " + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); - } - } - - /// - /// Gets or sets the bar style - /// - public ScaleBarStyle BarStyle - { - get { return _barStyle; } - set - { - _barStyle = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the minimum margin on the left of the bar - /// - public int MarginLeft - { - get { return _marginLeft; } - set - { - _marginLeft = value; - OnViewChanged(); - Dirty = true; - } - } - - /// - /// Gets or sets the minimum margin on the right of the bar - /// - public int MarginRight - { - get { return _marginRight; } - set - { - _marginRight = value; - OnViewChanged(); - Dirty = true; - } - } - - #region EventInvokers - - /// - /// Is this required? - /// - private void OnViewChanged() - { - } - - /// - /// Gets or (private) sets whether the display settings for the scale bar have been changed - /// - public bool Dirty { get; private set; } - - #endregion - - - #region Private static helpers - - private class UnitInfo - { - public readonly int Unit; - - public readonly double ToMeter; - public readonly string Name; - public readonly string Abbreviation; - - public UnitInfo(int unit, double toMeter, string name, string abbreviation) - { - Unit = unit; - ToMeter = toMeter; - Name = name; - Abbreviation = abbreviation; - } - } - - //for multipliers ranging from .00001 to 10000000000 - // Candidates are 1, 2, 2.5, and 5 * multiplier - // First candidate >starting interval is new interval - // next candidate - //next multiplier - private static double GetRoundIncrement(double startValue) - { - int nPower; //power of 10. Range of -5 to 10 gives huge scale range. - double candidate = 0d; //Candidate value for new interval. - for (nPower = PowerRangeMin; nPower <= PowerRangeMax; nPower++) - { - double multiplier = Math.Pow(10, nPower); //Mulitiplier, =10^exp, to apply to nice numbers. - for (int i = 0; i < NiceNumber; i++) - { - candidate = NiceNumberArray[i] * multiplier; - if (candidate > startValue) - return candidate; - } - } - return candidate; //return the maximum - } - - private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, - out int pixelsPerTic, out double scaleBarUnitsPerTic) - { - if (_forceRecalc) - { - // revert to large scale unit - _barUnit = BarUnitLargeScale; - _barUnitFactor = _barUnitFactorLargeScale; - _barUnitName = _barUnitNameLargeScale; - _barUnitShortName = _barUnitShortNameLargeScale; - _forceRecalc = false; - } - - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTic); - - if (BarUnitLargeScale != BarUnitSmallScale) - { - if (_barUnitFactor == _barUnitFactorSmallScale) - { - // currently on SmallScale units... - // check how many scale bar units if using LargeScale unit - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorLargeScale, - out int chkPixelsPerTick, out double chkScaleBarUnitsPerTic); - - // check if LargeScale bar length < 1 SmallScale unit - if (NumTicks * chkScaleBarUnitsPerTic * _barUnitFactorLargeScale < _barUnitFactorSmallScale) - { - // switch to LargeScale units - _barUnit = _barUnitLargeScale; - _barUnitFactor = _barUnitFactorLargeScale; - _barUnitName = _barUnitNameLargeScale; - _barUnitShortName = _barUnitShortNameLargeScale; - - pixelsPerTic = chkPixelsPerTick; - scaleBarUnitsPerTic = chkScaleBarUnitsPerTic; - } - } - else - { - // currently on LargeScale units... - // check if LargeScale bar length >= 1 SmallScale unit (ie LargeScale units never exceed 1 SmallScale unit) - if (NumTicks * scaleBarUnitsPerTic * _barUnitFactorLargeScale >= _barUnitFactorSmallScale) - { - // recalc for SmallScale unit - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, - out pixelsPerTic, out scaleBarUnitsPerTic); - - // switch to SmallScale units - _barUnit = _barUnitSmallScale; - _barUnitFactor = _barUnitFactorSmallScale; - _barUnitName = _barUnitNameSmallScale; - _barUnitShortName = _barUnitShortNameSmallScale; - } - } - } - } - - private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, - out int pixelsPerTic, out double scaleBarUnitsPerTic) - { - int minPixelsPerTic = widthOnDevice / (numTics * 2); - double barScale = mapScale / fBarUnitFactor; - int pixelsPerInch = dpi; - double barUnitsPerPixel = barScale * GeoSpatialMath.MetersPerInch / pixelsPerInch; - - //calculate the result - scaleBarUnitsPerTic = minPixelsPerTic * barUnitsPerPixel; - scaleBarUnitsPerTic = GetRoundIncrement(scaleBarUnitsPerTic); - pixelsPerTic = (int)(scaleBarUnitsPerTic / barUnitsPerPixel); - } - - /// - /// Keep only 5 (ScalePrecisionDigits) digits of precision for the scale and return the scale after formatted. - /// - private static double FormatRealScale(double scale) - { - double roundedScale; - - var rfMagnitude = (int)(Math.Log10(scale)); - var factor = Math.Pow(10, rfMagnitude - ScalePrecisionDigits); - if (Math.Abs(factor - 0) > 1e6) - roundedScale = (int)((scale / factor) + 0.5) * factor; - else - roundedScale = (int)(scale + 0.5); - return roundedScale; - } - - /// - /// Return the precision for the segment text of the scale bar. - /// - private static int PrecisionOfSegmentText(double value) - { - int precision = 0; - // handle values where Log10 is < 1 (eg ensure precision=0 when value=2.0, and precision=1 when value=2.5) - if (value < 10 && value > 0) - if (value < 1 || value - (int)value > 0.01) - { - precision = (int)Math.Ceiling(Math.Abs(Math.Log10(value))); - double f = value * Math.Pow(10, precision); - if (f - (int)f > 0.01) - precision++; - } - return precision; - } - - static private int MeasureDisplayStringWidthExact(Graphics graphics, string text, - Font font) - { - var ranges = new[] { new CharacterRange(0, text.Length) }; - var format = new StringFormat(); - format.SetMeasurableCharacterRanges(ranges); - - var rect = new RectangleF(0, 0, 1000, 1000); - - var regions = graphics.MeasureCharacterRanges(text, font, rect, format); - rect = regions[0].GetBounds(graphics); - - return (int)(rect.Right + 1.0f); - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using SharpMap.Utilities; + +namespace SharpMap.Rendering.Decoration.ScaleBar +{ + /* + Description : Implement the Control interfaces. + Developer : Simen + Contact : SimenWu@hotmail.com + Last Modified: 03/03/2003 + + April 2018 : Add support for large and small units with auto switching depending on map scale + : Change unit factor for Degrees; add new unit Nautical Mile + : Tweak label text placement + : Tweak calcs when MapUnits = degrees +*/ + + /// + /// Scale Bar map decoration + /// + [Serializable] + public class ScaleBar : MapDecoration + { + #region Constants + + private const int PowerRangeMin = -5; + private const int PowerRangeMax = 10; + private const int NiceNumber = 4; + private const int DefaultBarWidth = 9; + private static readonly double[] NiceNumberArray = { 1, 2, 2.5, 5 }; + private const int ScalePrecisionDigits = 5; + private const int GapScaleTextToBar = 3; + private const int GapBarToSegmentText = 1; + + private const bool DefaultBarOutline = true; + + private static readonly Color DefaultForeColor = Color.Black; + private static readonly Color DefaultBarOutlineCr = Color.Black; + private static readonly Color DefaultBarColor1 = Color.Red; + private static readonly Color DefaultBarColor2 = Color.White; + + private const int DefaultNumTics = 4; + private const int DefaultMarginX = 8; + private const int DefaultWidth = 180; + + private const double VerySmall = 0.0000001; + + private const double WebMercatorRadius = 6378137.0; + + #endregion + + private static readonly Dictionary Units = new Dictionary(); + + static ScaleBar() + { + Units.Add((int)Unit.Custom, new UnitInfo((int)Unit.Custom, 1.0, "Unknown", "Unknown")); + Units.Add((int)Unit.Meter, new UnitInfo((int)Unit.Meter, 1, "Meter", "m")); + Units.Add((int)Unit.Foot_US, new UnitInfo((int)Unit.Foot_US, 0.30480061, "Foot_US", "ft")); + Units.Add((int)Unit.Yard_Sears, new UnitInfo((int)Unit.Yard_Sears, 0.914398415, "Yards", "yard")); + Units.Add((int)Unit.Yard_Indian, new UnitInfo((int)Unit.Yard_Indian, 0.914398531, "Yards", "Unknown")); + Units.Add((int)Unit.Mile_US, new UnitInfo((int)Unit.Mile_US, 1609.347219, "Miles", "mi")); + Units.Add((int)Unit.Kilometer, new UnitInfo((int)Unit.Kilometer, 1000.0, "Kilometers", "km")); + Units.Add((int)Unit.Degree, new UnitInfo((int)Unit.Degree, GeoSpatialMath.MetersPerDegreeAtEquator, "Degree", "d")); + Units.Add((int)Unit.Nautical_Mile, new UnitInfo((int)Unit.Nautical_Mile, 1852, "Nautical Mile", "NM")); + } + + /// + /// Creates an instance of this class. Special handling applies when Map.SRID=3857 (WebMercator) + /// to adjust ScaleBar interval and text according to mid-latitude of current view. + /// + public ScaleBar() + { + MapUnit = (int)Unit.Meter; + BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; + Scale = 1; + Width = DefaultWidth; + _webMercatorFactor = 1.0; + } + + private Color _barColor1 = DefaultBarColor1; + private Color _barColor2 = DefaultBarColor2; + + //unit + private int _mapUnit = (int)Unit.Meter; //defaultMapUnit; + private int _obsBarUnit = (int)Unit.Meter; + private int _barUnit = (int)Unit.Meter; //defaultScaleBarUnit; + private int _barUnitLargeScale = (int)Unit.Meter; //defaultScaleBarUnit; + private int _barUnitSmallScale = (int)Unit.Kilometer; //defaultScaleBarUnit; + + //scale + private double _scale; //Initial scale. + private double _mapWidth; + private int _pageWidth; + private double _lon1; + private double _lon2; + private double _lat; + private double _webMercatorFactor; + private bool _forceRecalc; + + //bar + private int _numTics = DefaultNumTics; + private bool _barOutline = DefaultBarOutline; + private Color _barOutlineColor = DefaultBarOutlineCr; + private int _barWidth = DefaultBarWidth; + private ScaleBarLabelText _barLabelText = ScaleBarLabelText.RepresentativeFraction; + private ScaleBarStyle _barStyle = ScaleBarStyle.Standard; + + ////control + //private bool m_bTransparentBG; + //private bool m_bFormatNumber; + + // Create a default font to use with this control. + private Color _foreColor = DefaultForeColor; + private Font _font = (Font)SystemFonts.DefaultFont.Clone(); + + private int _marginLeft = DefaultMarginX; //left margin for the scale bar + private int _marginRight = DefaultMarginX; //right margin for the scale bar + + #region MapDecoration overrides + + /// + /// Function to compute the required size for rendering the map decoration object + /// This is just the size of the decoration object, border settings are excluded + /// + /// The graphics object + /// The map + /// The size of the map decoration + protected override Size InternalSize(Graphics g, Map map) + { + CalcScale((int)g.DpiX); + double width = MarginLeft + MarginRight + DefaultWidth; + double height = 2 * BarWidth + 2 * _font.Height; + return new Size((int)width, (int)height); + } + + /// + /// Function to render the actual map decoration. Note special handling when Map.SRID=3857 (WebMercator) + /// + /// + /// + protected override void OnRender(Graphics g, Map map) + { + var rectF = g.ClipBounds; + + if (MapUnit == (int)Unit.Degree) + { + var p1 = map.ImageToWorld(new PointF(0, map.Size.Height * 0.5f)); + var p2 = map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height * 0.5f)); + SetScaleD((int)g.DpiX, p1.X, p2.X, p1.Y, map.Size.Width); + } + else + SetScale((int)g.DpiX, map.Envelope.Width, map.Size.Width); + + switch (map.SRID) + { + case 3857: + //other spherical variations (all of which are deprecated except 900913): 900913 54004 41001 102113 102100 3785 + var midGrid = map.ImageToWorld(new PointF(map.Size.Width * 0.5f, map.Size.Height * 0.5f)); + // constrain to 85deg N/S + if (Math.Abs(midGrid.Y) >= 20000000) return; + // refer to https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor + _webMercatorFactor = 1 / Math.Cosh(midGrid.Y / WebMercatorRadius); + break; + + default: + _webMercatorFactor = 1.0; + break; + } + + var rect = new Rectangle(Point.Truncate(rectF.Location), Size.Truncate(rectF.Size)); + RenderScaleBar(g, rect); + } + + #endregion + + #region Private render methods + + private void RenderScaleBar(Graphics g, Rectangle rc) + { + int width = rc.Right - rc.Left; + int height = rc.Bottom - rc.Top; + int pixelsPerTic; + + double scaleBarUnitsPerTick; + + //if (!m_bTransparentBG) RenderBackground(g, rc); + //if (_borderVisible && m_nBorderWidth > 0) RenderBorder(g, rc); + + //Get the scale first. + if (_scale < VerySmall) + return; //return if the scale is just too small + + ////Initialize the locale. So the we can use the latest locale setting to show the numbers. + //m_locale.Init(); + + //Draw the bar. + CalcLargeOrSmallUnit((int)g.DpiX, width, _numTics, _scale, _barUnitFactor, out pixelsPerTic, + out scaleBarUnitsPerTick); + int nOffsetX = (width - _numTics * pixelsPerTic - _marginLeft - _marginRight) / 2 + _marginLeft; + //left margin + int nOffsetY = (height - _barWidth) / 2; + RenderBar(g, pixelsPerTic, rc.Left + nOffsetX, rc.Top + nOffsetY); + RenderVerbalScale(g, rc.Left + width / 2, rc.Top + nOffsetY - GapScaleTextToBar); + RenderSegmentText(g, rc.Left + nOffsetX, rc.Top + nOffsetY + _barWidth + GapBarToSegmentText, _numTics, pixelsPerTic, + scaleBarUnitsPerTick, + _barUnitShortName); + Dirty = false; + } + + /// + /// Render the bar + /// + /// The graphics object + /// The length of each tic + /// The x-offset + /// The y-offset + private void RenderBar(Graphics g, int nTicLength, int nOffsetX, int nOffsetY) + { + Color cr1 = OpacityColor(_barColor1); + Color cr2 = OpacityColor(_barColor2); + Color crOutline = OpacityColor(_barOutlineColor); + + RenderBarWithStyle(g, nOffsetX, nOffsetY, _numTics, nTicLength, _barWidth, cr1, cr2, _barOutline, + crOutline, _barStyle); + } + + /// + /// Render the bar with Style. + /// + /// The graphics object + /// The x-offset + /// The y-offset + /// The number of tics + /// The length of each tic + /// The width of the bar + /// The first bar color + /// The second bar color + /// Value indicating whether the bar should be outlined + /// The outline color + /// The + private static void RenderBarWithStyle(Graphics g, int nOffsetX, int nOffsetY, int nNumTics, int nTicLength, + int nBarWidth, + Color crBar1, Color crBar2, bool bOutline, Color crOutline, + ScaleBarStyle style) + { + if (nBarWidth > 1) + { + switch (style) + { + case ScaleBarStyle.Standard: + RenderTicBarStandard(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, + bOutline, crOutline); + break; + case ScaleBarStyle.Meridian: + RenderTicBarMeridian(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, + bOutline, crOutline); + break; + case ScaleBarStyle.Meridian1: + RenderTicBarMeridian1(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, + bOutline, crOutline); + break; + default: + RenderTicBarStandard(g, nNumTics, nBarWidth, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY, + bOutline, crOutline); + break; + } + } + else + RenderTicLine(g, nNumTics, crBar1, crBar2, nTicLength, nOffsetX, nOffsetY); + } + + /// + /// Render just the tic line + /// + /// The graphics object + /// The number of tics + /// The first bar color + /// The second bar color + /// The length of each tic + /// The x-origin + /// The y-origin + private static void RenderTicLine(Graphics g, int nNumTics, Color crBar1, Color crBar2, int nTicLength, + int xOrigin, int yOrigin) + { + var pen1 = new Pen(crBar1, 1); + var pen2 = new Pen(crBar2, 1); + + int x = xOrigin; + int y = yOrigin; + for (int i = 0; i < nNumTics; i++) + { + g.DrawLine(i % 2 != 0 ? pen2 : pen1, x, y, x + nTicLength, y); + x += nTicLength; + } + } + + /// + /// Render the bar with Style. + /// + /// The graphics object + /// The x-offset + /// The y-offset + /// The number of tics + /// The length of each tic + /// The width of the bar + /// The first bar color + /// The second bar color + /// Value indicating whether the bar should be outlined + /// The outline color + private static void RenderTicBarStandard(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, + int nTicLength, int xOrigin, int yOrigin, bool bOutline, + Color crOutline) + { + Color cr1, cr2; + + //Create pens. + if (bOutline) + { + cr1 = crOutline; + cr2 = crOutline; + } + else + { + cr1 = crBar1; + cr2 = crBar2; + } + var pen1 = new Pen(cr1, 1); + var pen2 = new Pen(cr2, 1); + + //Create brushes. + Brush brush1 = new SolidBrush(crBar1); + Brush brush2 = new SolidBrush(crBar2); + + int x = xOrigin; + int y1 = yOrigin; + /* + int y2 = y1 + nWidth; + */ + for (int i = 0; i < nNumTics; i++) + { + if (i % 2 == 1) + RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen1, brush1); + else + RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen2, brush2); + + x += nTicLength; + } + } + + private static void RenderRectangle(Graphics g, int x, int y, int width, int height, Pen pen, Brush brush) + { + if (brush != null) + g.FillRectangle(brush, x, y, width, height); + g.DrawRectangle(pen, x, y, width, height); + } + + /// + /// Render the bar with Style. + /// + /// The graphics object + /// The x-offset + /// The y-offset + /// The number of tics + /// The length of each tic + /// The width of the bar + /// The first bar color + /// The second bar color + /// Value indicating whether the bar should be outlined + /// The outline color + private static void RenderTicBarMeridian(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, + int nTicLength, int xOrigin, int yOrigin, bool bOutline, + Color crOutline) + { + Color cr1, cr2; + //Create pens. + if (bOutline) + { + cr1 = crOutline; + cr2 = crOutline; + } + else + { + cr1 = crBar1; + cr2 = crBar2; + } + var pen1 = new Pen(cr1, 1); + var pen2 = new Pen(cr2, 1); + + //Create brushes. + Brush brush1 = new SolidBrush(crBar1); + Brush brush2 = new SolidBrush(crBar2); + + int x = xOrigin; + int y1 = yOrigin; + //int y2 = y1 + nWidth; + int y12 = y1 + nBarWidth / 2; + int widthHalf = nBarWidth / 2 + 1; + for (int i = 0; i < nNumTics; i++) + { + if (i % 2 == 1) + { + RenderRectangle(g, x, y1, nTicLength + 1, widthHalf, pen2, brush2); + RenderRectangle(g, x, y12, nTicLength + 1, widthHalf, pen1, brush1); + } + else + { + RenderRectangle(g, x, y1, nTicLength + 1, widthHalf, pen1, brush1); + RenderRectangle(g, x, y12, nTicLength + 1, widthHalf, pen2, brush2); + } + x += nTicLength; + } + } + + /// + /// Render the bar with Style. + /// + /// The graphics object + /// The x-offset + /// The y-offset + /// The number of tics + /// The length of each tic + /// The width of the bar + /// The first bar color + /// The second bar color + /// Value indicating whether the bar should be outlined + /// The outline color + private static void RenderTicBarMeridian1(Graphics g, int nNumTics, int nBarWidth, Color crBar1, Color crBar2, + int nTicLength, int xOrigin, int yOrigin, bool bOutline, + Color crOutline) + { + Color cr1, cr2; + //Create pens. + if (bOutline) + { + cr1 = crOutline; + cr2 = crOutline; + } + else + { + cr1 = crBar1; + cr2 = crBar2; + } + Pen pen1 = new Pen(cr1, 1); + Pen pen2 = new Pen(cr2, 1); + + //Create brushes. + Brush brush1 = new SolidBrush(crBar1); + Brush brush2 = new SolidBrush(crBar2); + + int x = xOrigin; + int y1 = yOrigin; + //int y2 = y1 + nWidth; + int y12 = y1 + nBarWidth / 2; + int widthHalf = nBarWidth / 2; + for (int i = 0; i < nNumTics; i++) + { + if (i % 2 == 1) + { + RenderRectangle(g, x, y1, nTicLength + 1, nBarWidth, pen2, brush2); + } + else + { + RenderRectangle(g, x, y1, nTicLength + 1, widthHalf + 1, pen1, brush1); + RenderRectangle(g, x, y12, nTicLength + 1, widthHalf + 1, pen1, brush1); + } + x += nTicLength; + } + } + + + #endregion + + /// + /// Renders the verbal text above the scale bar. + /// + /// The graphics object + /// x-ordinate of the reference point for the text, the center of the bar + /// y-ordinate of the reference point for the text, the top or the bar + private void RenderVerbalScale(Graphics g, int x, int y) + { + int lastX = int.MinValue; + //Get the scale text. + var sbText = ScaleBarText(_scale, _barLabelText); + //Draw the text. + RenderTextWithFormat(g, sbText, x, y, + new StringFormat + { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far }, ref lastX); + } + + private static readonly StringFormat TopCenter = + new StringFormat + { + LineAlignment = StringAlignment.Near, + Alignment = StringAlignment.Center + }; + + /// + /// Renders the segment text below the scale bar + /// + /// The graphics object + /// The x-ordinate of the reference point for the segment text, the beginning of the bar + /// The y-ordinate of the reference point for the segment text, the bottom of the bar + /// The number of tics + /// The width of each tic in pixels + /// The scale bar units per tic + /// The abbreviated unit text + private void RenderSegmentText(Graphics g, int x, int y, int tics, int ticWidth, double scaleBarUnitsPerTic, + string strUnit) + { + int lastX = int.MinValue; + string text; + int size; + int endX; + int offsetX; + + //Make sure this text is not overdrawn... (previously km could be partially truncated) + text = (_barLabelText == ScaleBarLabelText.JustUnits ? "0" : strUnit); + size = MeasureDisplayStringWidthExact(g, text, _font); + offsetX = 0; + if (x - size / 2f < _boundingRectangle.Left) + { + offsetX = _boundingRectangle.Left + (int)Math.Ceiling(size / 2f) - x; + } + RenderTextWithFormat(g, text, x + offsetX, y, TopCenter, ref lastX); + + lastX = int.MinValue; + //Set the output format. + int precision = PrecisionOfSegmentText(scaleBarUnitsPerTic); + string format = String.Format("F{0}", precision); + + for (int i = 1; i <= tics; i++) + { + double value = scaleBarUnitsPerTic * i; + text = value.ToString(format, System.Globalization.CultureInfo.CurrentUICulture); + offsetX = 0; + if (i == tics) + { + //Make sure this text is not overdrawn... (should be aligned with ticmark) + size = MeasureDisplayStringWidthExact(g, text, _font); + endX = x + ticWidth * i + (int)Math.Ceiling(size / 2f); + if (endX > _boundingRectangle.Right) + { + offsetX = _boundingRectangle.Right - endX; + } + + } + + RenderTextWithFormat(g, text, x + ticWidth * i + offsetX, y, TopCenter, ref lastX); + } + } + + /// + /// Renders the text + /// + /// The graphics object + /// The text to render + /// The x-ordinate of the reference point + /// The y-ordinate of the reference point + /// The string format, mainly vertical an horizontal alignment are of interest. + /// The last horizontal position, to ensure that texts are not overlapping + private void RenderTextWithFormat(Graphics g, string text, int x, int y, StringFormat format, ref int lastX) + { + //Get the size of the string + var size = g.MeasureString(text, _font); + switch (format.Alignment) + { + case StringAlignment.Far: + if (x - size.Width < lastX) return; + break; + case StringAlignment.Center: + if (x - size.Width / 2 < lastX) return; + break; + case StringAlignment.Near: + if (x < lastX) return; + break; + } + + //Output the text. + g.DrawString(text, _font, new SolidBrush(OpacityColor(_foreColor)), new Point(x, y), format); + + //Keep track of latest x position. + switch (format.Alignment) + { + case StringAlignment.Far: + lastX = x + (int)size.Width; + break; + case StringAlignment.Center: + lastX = x + (int)(size.Width / 2); + break; + case StringAlignment.Near: + lastX = x; + break; + } + } + + /// + /// Calculate the scale and store it in . + /// + /// It should be called to calculate the real map scale everytime the user change mapunit or set the scale + /// + /// + private void CalcScale(int dpi) + { + double fScale; + if (_mapUnit == (int)Unit.Degree) //LatLong + fScale = ScaleCalculations.CalculateScaleLatLong(_lon1, _lon2, _lat, _pageWidth, dpi); + else + fScale = ScaleCalculations.CalculateScaleNonLatLong(_mapWidth, _pageWidth, _mapUnitFactor, dpi); + _scale = fScale; + } + + /// + /// Gets or sets the foreground color, used to render the labeling + /// + public Color ForeColor + { + get { return _foreColor; } + set + { + _foreColor = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the font to label the bar + /// + public Font Font + { + get { return _font; } + set + { + if (value == null) + return; + _font = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the first bar color + /// + public Color BarColor1 + { + get { return _barColor1; } + set + { + _barColor1 = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the second bar color + /// + public Color BarColor2 + { + get { return _barColor2; } + set + { + _barColor2 = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the bar width + /// + public int BarWidth + { + get { return _barWidth; } + set + { + if (value < 1) value = 1; + _barWidth = value; + OnViewChanged(); + Dirty = true; + } + } + + private double _mapUnitFactor; + private string _mapUnitName, _mapUnitShortName; + + /// + /// Factors derived internally from BarUnit(s) + /// + private double _barUnitFactor; + private double _barUnitFactorLargeScale; + private double _barUnitFactorSmallScale; + + private string _barUnitName, _barUnitShortName; + private string _barUnitNameLargeScale, _barUnitShortNameLargeScale; + private string _barUnitNameSmallScale, _barUnitShortNameSmallScale; + + /// + /// Map unit + /// + public int MapUnit + { + get { return _mapUnit; } + set + { + _mapUnit = value; + GetUnitInformation(_mapUnit, out _mapUnitFactor, out _mapUnitName, out _mapUnitShortName); + CalcScale(96); + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Bar unit + /// + [Obsolete("Use BarUnitLargeScale and BarUnitSmallScale")] + public int BarUnit + { + get { return _obsBarUnit; } + set + { + //_barUnit = value; + //GetUnitInformation(_barUnit, out _barUnitFactor, out _barUnitName, out _barUnitShortName); + //CalcScale(96); + //OnViewChanged(); + //Dirty = true; + + _obsBarUnit = value; + + if (Units.TryGetValue(value, out UnitInfo unitInfo)) + { + switch ((Unit)value) + { + case Unit.Meter: + case Unit.Kilometer: + case Unit.Nautical_Mile: + { + BarUnitLargeScale = (int)Unit.Meter; + BarUnitSmallScale = (int)Unit.Kilometer; + return; + } + + case Unit.Foot_US: + case Unit.Yard_Indian: + case Unit.Yard_Sears: + { + BarUnitLargeScale = value; + BarUnitSmallScale = (int)Unit.Mile_US; + return; + } + + case Unit.Mile_US: + { + BarUnitLargeScale = (int)Unit.Yard_Sears; + BarUnitSmallScale = (int)Unit.Mile_US; + return; + } + + case Unit.Degree: + { + BarUnitLargeScale = (int)Unit.Degree; + BarUnitSmallScale = (int)Unit.Degree; + return; + } + + default: + { + BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; + return; + } + } + } + else + { + BarUnitLargeScale = (int)Unit.Custom; + BarUnitSmallScale = (int)Unit.Custom; + return; + } + } + } + + /// + /// Bar Unit for use at large scales (small area) such as ft, m, or yd. + /// + public int BarUnitLargeScale + { + get { return _barUnitLargeScale; } + set + { + GetUnitInformation(value, out double d, out _barUnitNameLargeScale, out _barUnitShortNameLargeScale); + + _barUnitLargeScale = value; + _barUnitFactorLargeScale = d; + _forceRecalc = true; + CalcScale(96); + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Bar Unit for use at small scales (large area) such as km, mile, NM, Deg. + /// + public int BarUnitSmallScale + { + get { return _barUnitSmallScale; } + set + { + GetUnitInformation(value, out double d, out _barUnitNameSmallScale, out _barUnitShortNameSmallScale); + + _barUnitSmallScale = value; + _barUnitFactorSmallScale = d; + _forceRecalc = true; + CalcScale(96); + OnViewChanged(); + Dirty = true; + } + } + private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, + out string mapUnitShortName) + { + UnitInfo unitInfo; + if (Units.TryGetValue(mapUnit, out unitInfo)) + { + mapUnitFactor = unitInfo.ToMeter; + mapUnitName = unitInfo.Name; + mapUnitShortName = unitInfo.Abbreviation; + } + else + { + mapUnitFactor = 1; + mapUnitName = "Custom"; + mapUnitShortName = string.Empty; + } + } + + + /// + /// Bar outline + /// + public bool BarOutline + { + get { return _barOutline; } + set + { + _barOutline = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Bar outline color + /// + public Color BarOutlineColor + { + get { return _barOutlineColor; } + set + { + _barOutlineColor = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Scale + /// + public double Scale + { + get { return _scale; } + set + { + _scale = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// + /// + /// + /// + /// + public void SetCustomUnit(double factor, string name, string shortName) + { + //If the user wants to use customer unit, then the map unit and the bar unit will be the same + //Map Unit + if (factor <= 0.0) //factor should be >0 + factor = 1.0; + + ScaleBar.Units[(int)Unit.Custom] = new UnitInfo((int)Unit.Custom, factor, name, shortName); + MapUnit = (int)Unit.Custom; + + _barUnitLargeScale = (int)Unit.Custom; + _barUnitFactorLargeScale = factor; + _barUnitNameLargeScale = name; + _barUnitShortNameLargeScale = shortName; + + _barUnitSmallScale = (int)Unit.Custom; + _barUnitFactorSmallScale = factor; + _barUnitNameSmallScale = name; + _barUnitShortNameSmallScale = shortName; + + _forceRecalc = true; + CalcScale(96); + OnViewChanged(); + } + + /* + private void GetMapUnitInfo(out double factor, out string name, out string shortName) + { + factor = _mapUnitFactor; + name = _mapUnitName; + shortName = _mapUnitShortName; + } + + private void GetBarUnitInfo(out double factor, out string name, out string shortName) + { + factor = _barUnitFactor; + name = _barUnitName; + shortName = _barUnitShortName; + } + */ + + private void SetScaleD(int dpi, double lon1, double lon2, double lat, int widthInPixel) + { + _lon1 = lon1; + _lon2 = lon2; + _lat = lat; + _pageWidth = widthInPixel; + CalcScale(dpi); + OnViewChanged(); + } + + private void SetScale(int dpi, double mapWidth, int widthInPixel) + { + _mapWidth = mapWidth; + _pageWidth = widthInPixel; + CalcScale(dpi); + OnViewChanged(); + } + + /// + /// Gets or sets the number of ticks + /// + public int NumTicks + { + get { return _numTics; } + set + { + if (value < 1) value = 1; + _numTics = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the labeling for the bar + /// + public ScaleBarLabelText ScaleText + { + get { return _barLabelText; } + set + { + _barLabelText = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the width of the scale bar + /// + public int Width { get; set; } + + private string ScaleBarText(double scale, ScaleBarLabelText scaleText) + { + switch (scaleText) + { + case ScaleBarLabelText.NoText: + return string.Empty; + case ScaleBarLabelText.JustUnits: + return _barUnitName; + default: + var precision = 0; + + scale *= _webMercatorFactor; + + //set the precision. Keep the first 5 (ScalePrecisionDigits) digits. + if (scale > 0) + { + var magnitude = (int)(Math.Log10(scale)); + precision = ScalePrecisionDigits - magnitude; + if (precision < 0) + precision = 0; + if (magnitude >= 2) + //don't show the precision if the scale is less than than 1:100 (e.g. 1:1000) + precision = 0; + + } + var format = string.Format("N{0}", precision); + + scale = FormatRealScale(scale); + return "1 : " + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); + } + } + + /// + /// Gets or sets the bar style + /// + public ScaleBarStyle BarStyle + { + get { return _barStyle; } + set + { + _barStyle = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the minimum margin on the left of the bar + /// + public int MarginLeft + { + get { return _marginLeft; } + set + { + _marginLeft = value; + OnViewChanged(); + Dirty = true; + } + } + + /// + /// Gets or sets the minimum margin on the right of the bar + /// + public int MarginRight + { + get { return _marginRight; } + set + { + _marginRight = value; + OnViewChanged(); + Dirty = true; + } + } + + #region EventInvokers + + /// + /// Is this required? + /// + private void OnViewChanged() + { + } + + /// + /// Gets or (private) sets whether the display settings for the scale bar have been changed + /// + public bool Dirty { get; private set; } + + #endregion + + + #region Private static helpers + + private class UnitInfo + { + public readonly int Unit; + + public readonly double ToMeter; + public readonly string Name; + public readonly string Abbreviation; + + public UnitInfo(int unit, double toMeter, string name, string abbreviation) + { + Unit = unit; + ToMeter = toMeter; + Name = name; + Abbreviation = abbreviation; + } + } + + //for multipliers ranging from .00001 to 10000000000 + // Candidates are 1, 2, 2.5, and 5 * multiplier + // First candidate >starting interval is new interval + // next candidate + //next multiplier + private static double GetRoundIncrement(double startValue) + { + int nPower; //power of 10. Range of -5 to 10 gives huge scale range. + double candidate = 0d; //Candidate value for new interval. + for (nPower = PowerRangeMin; nPower <= PowerRangeMax; nPower++) + { + double multiplier = Math.Pow(10, nPower); //Mulitiplier, =10^exp, to apply to nice numbers. + for (int i = 0; i < NiceNumber; i++) + { + candidate = NiceNumberArray[i] * multiplier; + if (candidate > startValue) + return candidate; + } + } + return candidate; //return the maximum + } + + private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + if (_forceRecalc) + { + // revert to large scale unit + _barUnit = BarUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + _forceRecalc = false; + } + + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTic); + + if (BarUnitLargeScale != BarUnitSmallScale) + { + if (_barUnitFactor == _barUnitFactorSmallScale) + { + // currently on SmallScale units... + // check how many scale bar units if using LargeScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorLargeScale, + out int chkPixelsPerTick, out double chkScaleBarUnitsPerTic); + + // check if LargeScale bar length < 1 SmallScale unit + if (NumTicks * chkScaleBarUnitsPerTic * _barUnitFactorLargeScale < _barUnitFactorSmallScale) + { + // switch to LargeScale units + _barUnit = _barUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + + pixelsPerTic = chkPixelsPerTick; + scaleBarUnitsPerTic = chkScaleBarUnitsPerTic; + } + } + else + { + // currently on LargeScale units... + // check if LargeScale bar length >= 1 SmallScale unit (ie LargeScale units never exceed 1 SmallScale unit) + if (NumTicks * scaleBarUnitsPerTic * _barUnitFactorLargeScale >= _barUnitFactorSmallScale) + { + // recalc for SmallScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, + out pixelsPerTic, out scaleBarUnitsPerTic); + + // switch to SmallScale units + _barUnit = _barUnitSmallScale; + _barUnitFactor = _barUnitFactorSmallScale; + _barUnitName = _barUnitNameSmallScale; + _barUnitShortName = _barUnitShortNameSmallScale; + } + } + } + } + + private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + int minPixelsPerTic = widthOnDevice / (numTics * 2); + double barScale = mapScale / fBarUnitFactor; + int pixelsPerInch = dpi; + double barUnitsPerPixel = barScale * GeoSpatialMath.MetersPerInch / pixelsPerInch; + + //calculate the result + barUnitsPerPixel *= _webMercatorFactor; + + scaleBarUnitsPerTic = minPixelsPerTic * barUnitsPerPixel; + scaleBarUnitsPerTic = GetRoundIncrement(scaleBarUnitsPerTic); + pixelsPerTic = (int)(scaleBarUnitsPerTic / barUnitsPerPixel); + } + + /// + /// Keep only 5 (ScalePrecisionDigits) digits of precision for the scale and return the scale after formatted. + /// + private static double FormatRealScale(double scale) + { + double roundedScale; + + var rfMagnitude = (int)(Math.Log10(scale)); + var factor = Math.Pow(10, rfMagnitude - ScalePrecisionDigits); + if (Math.Abs(factor - 0) > 1e6) + roundedScale = (int)((scale / factor) + 0.5) * factor; + else + roundedScale = (int)(scale + 0.5); + return roundedScale; + } + + /// + /// Return the precision for the segment text of the scale bar. + /// + private static int PrecisionOfSegmentText(double value) + { + int precision = 0; + // handle values where Log10 is < 1 (eg ensure precision=0 when value=2.0, and precision=1 when value=2.5) + if (value < 10 && value > 0) + if (value < 1 || value - (int)value > 0.01) + { + precision = (int)Math.Ceiling(Math.Abs(Math.Log10(value))); + double f = value * Math.Pow(10, precision); + if (f - (int)f > 0.01) + precision++; + } + return precision; + } + + static private int MeasureDisplayStringWidthExact(Graphics graphics, string text, + Font font) + { + var ranges = new[] { new CharacterRange(0, text.Length) }; + var format = new StringFormat(); + format.SetMeasurableCharacterRanges(ranges); + + var rect = new RectangleF(0, 0, 1000, 1000); + + var regions = graphics.MeasureCharacterRanges(text, font, rect, format); + rect = regions[0].GetBounds(graphics); + + return (int)(rect.Right + 1.0f); + } + + #endregion + } +} diff --git a/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs new file mode 100644 index 00000000..35e15744 --- /dev/null +++ b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs @@ -0,0 +1,1274 @@ +using System.Collections.Generic; +using System.Data; +using System.Drawing; +using System.IO; +using GeoAPI.CoordinateSystems.Transformations; +using GeoAPI.Geometries; +using NetTopologySuite; +using NUnit.Framework; +using ProjNet.CoordinateSystems; +using ProjNet.CoordinateSystems.Transformations; +using SharpMap; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Decoration.ScaleBar; +using Unit = SharpMap.Rendering.Decoration.ScaleBar.Unit; + +namespace UnitTests.Rendering.Decoration.ScaleBar +{ + [TestFixture] + public class ScaleBarTests + { + private Map _map; + + //private readonly List _testLatitudes = new List {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85}; + private readonly List _testLatitudes = new List {0, 10, 20, 30, 40, 50, 60, 70, 80}; + + + [TestFixtureSetUp] + public void SetupMap() + { + System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "SharpMap")); + System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "BruTileCache", "Osm")); + + var files = System.IO.Directory.GetFiles(Path.Combine(Path.GetTempPath(), "SharpMap")); + foreach (var file in files) + System.IO.File.Delete(file); + + var gss = new NtsGeometryServices(); + var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( + new CoordinateSystemFactory(), + new CoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + + // plug-in WebMercator so that correct spherical definition is directly available to Layer Transformations using SRID + var pcs = (ProjectedCoordinateSystem) ProjectedCoordinateSystem.WebMercator; + css.AddCoordinateSystem((int) pcs.AuthorityCode, pcs); + + GeoAPI.GeometryServiceProvider.Instance = gss; + SharpMap.Session.Instance + .SetGeometryServices(gss) + .SetCoordinateSystemServices(css) + .SetCoordinateSystemRepository(css); + GeoAPI.GeometryServiceProvider.Instance = NetTopologySuite.NtsGeometryServices.Instance; + + _map = new Map + { + Size = new System.Drawing.Size(1440, 1080), + BackColor = System.Drawing.Color.LemonChiffon, + SRID = 3857 + }; + + var lyr = new VectorLayer("Test Data", CreateScaleBarDataSource()) + { + SRID = 4326, + TargetSRID = _map.SRID, + CacheExtent = false + }; + + _map.Layers.Add(lyr); + + // Add bru-tile map background + var cacheFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileCache", "Osm"); + var lyrBruTile = new TileLayer( + BruTile.Predefined.KnownTileSources.Create(BruTile.Predefined.KnownTileSource.OpenStreetMap), + "Tiles", Color.Transparent, true, cacheFolder) + { + SRID = 3857, + TargetSRID = _map.SRID + }; + _map.BackgroundLayer.Add(lyrBruTile); + + var scaleBar = new SharpMap.Rendering.Decoration.ScaleBar.ScaleBar() + { + MapUnit = (int) Unit.Meter, + BarUnitLargeScale = (int) Unit.Kilometer, + BarUnitSmallScale = (int) Unit.Meter, + Anchor = MapDecorationAnchor.Center, + BarStyle = ScaleBarStyle.Meridian, + BarColor1 = Color.Transparent, + BarColor2 = Color.DodgerBlue, + BarWidth = 20 + }; + _map.Decorations.Add(scaleBar); + + _map.ZoomToExtents(); + } + + private GeometryFeatureProvider CreateScaleBarDataSource() + { + var fdt = new FeatureDataTable {TableName = "ScaleBarTests"}; + fdt.Columns.Add(new DataColumn("oid", typeof(uint))); + fdt.Columns[0].AutoIncrement = true; + + fdt.Columns.Add(new DataColumn("Latitude", typeof(int))); // start latitude for filtering + fdt.Columns.Add(new DataColumn("Interval", typeof(int))); // distance interval for filtering + + fdt.PrimaryKey = new[] {fdt.Columns[0]}; + + LoadData(fdt); + + return new GeometryFeatureProvider(fdt); + } + + private void LoadData(FeatureDataTable fdt) + { + fdt.BeginLoadData(); + LoadVincentyData(fdt); + fdt.EndLoadData(); + } + + private void LoadVincentyData(FeatureDataTable fdt) + { + //Common Meridian = 99deg East + //Points generated using Vincenty calcs (direct) west (270deg) and east (90deg) + //at intervals of 100, 1000, 10000m (limited to +/3 degrees of common meridian) + //CentreLat and Interval columns provided for filtering FeatureDataSet in SharpMap + + //Longitude,Latitude,Interval,Multiple + AddRecord(fdt, 99.00000000, 0.00000000, 0, 0); + AddRecord(fdt, 98.99910168, 0.00000000, 0, 100); + AddRecord(fdt, 98.99820337, 0.00000000, 0, 100); + AddRecord(fdt, 98.99730505, 0.00000000, 0, 100); + AddRecord(fdt, 98.99640674, 0.00000000, 0, 100); + AddRecord(fdt, 98.99550842, 0.00000000, 0, 100); + AddRecord(fdt, 98.99461011, 0.00000000, 0, 100); + AddRecord(fdt, 98.99371179, 0.00000000, 0, 100); + AddRecord(fdt, 98.99281348, 0.00000000, 0, 100); + AddRecord(fdt, 98.99191516, 0.00000000, 0, 100); + AddRecord(fdt, 98.99101685, 0.00000000, 0, 1000); + AddRecord(fdt, 98.98203369, 0.00000000, 0, 1000); + AddRecord(fdt, 98.97305054, 0.00000000, 0, 1000); + AddRecord(fdt, 98.96406739, 0.00000000, 0, 1000); + AddRecord(fdt, 98.95508424, 0.00000000, 0, 1000); + AddRecord(fdt, 98.94610108, 0.00000000, 0, 1000); + AddRecord(fdt, 98.93711793, 0.00000000, 0, 1000); + AddRecord(fdt, 98.92813478, 0.00000000, 0, 1000); + AddRecord(fdt, 98.91915162, 0.00000000, 0, 1000); + AddRecord(fdt, 98.91016847, 0.00000000, 0, 10000); + AddRecord(fdt, 98.82033694, 0.00000000, 0, 10000); + AddRecord(fdt, 98.73050541, 0.00000000, 0, 10000); + AddRecord(fdt, 98.64067389, 0.00000000, 0, 10000); + AddRecord(fdt, 98.55084236, 0.00000000, 0, 10000); + AddRecord(fdt, 98.46101083, 0.00000000, 0, 10000); + AddRecord(fdt, 98.37117930, 0.00000000, 0, 10000); + AddRecord(fdt, 98.28134777, 0.00000000, 0, 10000); + AddRecord(fdt, 98.19151624, 0.00000000, 0, 10000); + AddRecord(fdt, 98.10168472, 0.00000000, 0, 10000); + AddRecord(fdt, 99.00089832, 0.00000000, 0, 100); + AddRecord(fdt, 99.00179663, 0.00000000, 0, 100); + AddRecord(fdt, 99.00269495, 0.00000000, 0, 100); + AddRecord(fdt, 99.00359326, 0.00000000, 0, 100); + AddRecord(fdt, 99.00449158, 0.00000000, 0, 100); + AddRecord(fdt, 99.00538989, 0.00000000, 0, 100); + AddRecord(fdt, 99.00628821, 0.00000000, 0, 100); + AddRecord(fdt, 99.00718652, 0.00000000, 0, 100); + AddRecord(fdt, 99.00808484, 0.00000000, 0, 100); + AddRecord(fdt, 99.00898315, 0.00000000, 0, 1000); + AddRecord(fdt, 99.01796631, 0.00000000, 0, 1000); + AddRecord(fdt, 99.02694946, 0.00000000, 0, 1000); + AddRecord(fdt, 99.03593261, 0.00000000, 0, 1000); + AddRecord(fdt, 99.04491576, 0.00000000, 0, 1000); + AddRecord(fdt, 99.05389892, 0.00000000, 0, 1000); + AddRecord(fdt, 99.06288207, 0.00000000, 0, 1000); + AddRecord(fdt, 99.07186522, 0.00000000, 0, 1000); + AddRecord(fdt, 99.08084838, 0.00000000, 0, 1000); + AddRecord(fdt, 99.08983153, 0.00000000, 0, 10000); + AddRecord(fdt, 99.17966306, 0.00000000, 0, 10000); + AddRecord(fdt, 99.26949459, 0.00000000, 0, 10000); + AddRecord(fdt, 99.35932611, 0.00000000, 0, 10000); + AddRecord(fdt, 99.44915764, 0.00000000, 0, 10000); + AddRecord(fdt, 99.53898917, 0.00000000, 0, 10000); + AddRecord(fdt, 99.62882070, 0.00000000, 0, 10000); + AddRecord(fdt, 99.71865223, 0.00000000, 0, 10000); + AddRecord(fdt, 99.80848376, 0.00000000, 0, 10000); + AddRecord(fdt, 99.89831528, 0.00000000, 0, 10000); + AddRecord(fdt, 99.00000000, 5.00000000, 5, 0); + AddRecord(fdt, 98.99909828, 5.00000000, 5, 100); + AddRecord(fdt, 98.99819655, 5.00000000, 5, 100); + AddRecord(fdt, 98.99729483, 4.99999999, 5, 100); + AddRecord(fdt, 98.99639310, 4.99999999, 5, 100); + AddRecord(fdt, 98.99549138, 4.99999998, 5, 100); + AddRecord(fdt, 98.99458966, 4.99999998, 5, 100); + AddRecord(fdt, 98.99368793, 4.99999997, 5, 100); + AddRecord(fdt, 98.99278621, 4.99999996, 5, 100); + AddRecord(fdt, 98.99188449, 4.99999995, 5, 100); + AddRecord(fdt, 98.99098276, 4.99999994, 5, 1000); + AddRecord(fdt, 98.98196552, 4.99999975, 5, 1000); + AddRecord(fdt, 98.97294829, 4.99999944, 5, 1000); + AddRecord(fdt, 98.96393105, 4.99999901, 5, 1000); + AddRecord(fdt, 98.95491381, 4.99999845, 5, 1000); + AddRecord(fdt, 98.94589657, 4.99999777, 5, 1000); + AddRecord(fdt, 98.93687934, 4.99999696, 5, 1000); + AddRecord(fdt, 98.92786210, 4.99999603, 5, 1000); + AddRecord(fdt, 98.91884486, 4.99999498, 5, 1000); + AddRecord(fdt, 98.90982762, 4.99999380, 5, 10000); + AddRecord(fdt, 98.81965525, 4.99997519, 5, 10000); + AddRecord(fdt, 98.72948288, 4.99994418, 5, 10000); + AddRecord(fdt, 98.63931053, 4.99990077, 5, 10000); + AddRecord(fdt, 98.54913818, 4.99984495, 5, 10000); + AddRecord(fdt, 98.45896586, 4.99977673, 5, 10000); + AddRecord(fdt, 98.36879355, 4.99969611, 5, 10000); + AddRecord(fdt, 98.27862127, 4.99960308, 5, 10000); + AddRecord(fdt, 98.18844901, 4.99949765, 5, 10000); + AddRecord(fdt, 98.09827679, 4.99937982, 5, 10000); + AddRecord(fdt, 99.00090172, 5.00000000, 5, 100); + AddRecord(fdt, 99.00180345, 5.00000000, 5, 100); + AddRecord(fdt, 99.00270517, 4.99999999, 5, 100); + AddRecord(fdt, 99.00360690, 4.99999999, 5, 100); + AddRecord(fdt, 99.00450862, 4.99999998, 5, 100); + AddRecord(fdt, 99.00541034, 4.99999998, 5, 100); + AddRecord(fdt, 99.00631207, 4.99999997, 5, 100); + AddRecord(fdt, 99.00721379, 4.99999996, 5, 100); + AddRecord(fdt, 99.00811551, 4.99999995, 5, 100); + AddRecord(fdt, 99.00901724, 4.99999994, 5, 1000); + AddRecord(fdt, 99.01803448, 4.99999975, 5, 1000); + AddRecord(fdt, 99.02705171, 4.99999944, 5, 1000); + AddRecord(fdt, 99.03606895, 4.99999901, 5, 1000); + AddRecord(fdt, 99.04508619, 4.99999845, 5, 1000); + AddRecord(fdt, 99.05410343, 4.99999777, 5, 1000); + AddRecord(fdt, 99.06312066, 4.99999696, 5, 1000); + AddRecord(fdt, 99.07213790, 4.99999603, 5, 1000); + AddRecord(fdt, 99.08115514, 4.99999498, 5, 1000); + AddRecord(fdt, 99.09017238, 4.99999380, 5, 10000); + AddRecord(fdt, 99.18034475, 4.99997519, 5, 10000); + AddRecord(fdt, 99.27051712, 4.99994418, 5, 10000); + AddRecord(fdt, 99.36068947, 4.99990077, 5, 10000); + AddRecord(fdt, 99.45086182, 4.99984495, 5, 10000); + AddRecord(fdt, 99.54103414, 4.99977673, 5, 10000); + AddRecord(fdt, 99.63120645, 4.99969611, 5, 10000); + AddRecord(fdt, 99.72137873, 4.99960308, 5, 10000); + AddRecord(fdt, 99.81155099, 4.99949765, 5, 10000); + AddRecord(fdt, 99.90172321, 4.99937982, 5, 10000); + AddRecord(fdt, 99.00000000, 10.00000000, 10, 0); + AddRecord(fdt, 98.99908792, 10.00000000, 10, 100); + AddRecord(fdt, 98.99817584, 10.00000000, 10, 100); + AddRecord(fdt, 98.99726376, 9.99999999, 10, 100); + AddRecord(fdt, 98.99635168, 9.99999998, 10, 100); + AddRecord(fdt, 98.99543959, 9.99999997, 10, 100); + AddRecord(fdt, 98.99452751, 9.99999996, 10, 100); + AddRecord(fdt, 98.99361543, 9.99999994, 10, 100); + AddRecord(fdt, 98.99270335, 9.99999992, 10, 100); + AddRecord(fdt, 98.99179127, 9.99999990, 10, 100); + AddRecord(fdt, 98.99087919, 9.99999988, 10, 1000); + AddRecord(fdt, 98.98175838, 9.99999950, 10, 1000); + AddRecord(fdt, 98.97263756, 9.99999888, 10, 1000); + AddRecord(fdt, 98.96351675, 9.99999800, 10, 1000); + AddRecord(fdt, 98.95439594, 9.99999688, 10, 1000); + AddRecord(fdt, 98.94527513, 9.99999550, 10, 1000); + AddRecord(fdt, 98.93615432, 9.99999388, 10, 1000); + AddRecord(fdt, 98.92703351, 9.99999200, 10, 1000); + AddRecord(fdt, 98.91791270, 9.99998988, 10, 1000); + AddRecord(fdt, 98.90879188, 9.99998750, 10, 10000); + AddRecord(fdt, 98.81758378, 9.99995002, 10, 10000); + AddRecord(fdt, 98.72637571, 9.99988754, 10, 10000); + AddRecord(fdt, 98.63516768, 9.99980007, 10, 10000); + AddRecord(fdt, 98.54395970, 9.99968761, 10, 10000); + AddRecord(fdt, 98.45275180, 9.99955015, 10, 10000); + AddRecord(fdt, 98.36154397, 9.99938771, 10, 10000); + AddRecord(fdt, 98.27033625, 9.99920028, 10, 10000); + AddRecord(fdt, 98.17912864, 9.99898786, 10, 10000); + AddRecord(fdt, 98.08792115, 9.99875044, 10, 10000); + AddRecord(fdt, 99.00091208, 10.00000000, 10, 100); + AddRecord(fdt, 99.00182416, 10.00000000, 10, 100); + AddRecord(fdt, 99.00273624, 9.99999999, 10, 100); + AddRecord(fdt, 99.00364832, 9.99999998, 10, 100); + AddRecord(fdt, 99.00456041, 9.99999997, 10, 100); + AddRecord(fdt, 99.00547249, 9.99999996, 10, 100); + AddRecord(fdt, 99.00638457, 9.99999994, 10, 100); + AddRecord(fdt, 99.00729665, 9.99999992, 10, 100); + AddRecord(fdt, 99.00820873, 9.99999990, 10, 100); + AddRecord(fdt, 99.00912081, 9.99999988, 10, 1000); + AddRecord(fdt, 99.01824162, 9.99999950, 10, 1000); + AddRecord(fdt, 99.02736244, 9.99999888, 10, 1000); + AddRecord(fdt, 99.03648325, 9.99999800, 10, 1000); + AddRecord(fdt, 99.04560406, 9.99999688, 10, 1000); + AddRecord(fdt, 99.05472487, 9.99999550, 10, 1000); + AddRecord(fdt, 99.06384568, 9.99999388, 10, 1000); + AddRecord(fdt, 99.07296649, 9.99999200, 10, 1000); + AddRecord(fdt, 99.08208730, 9.99998988, 10, 1000); + AddRecord(fdt, 99.09120812, 9.99998750, 10, 10000); + AddRecord(fdt, 99.18241622, 9.99995002, 10, 10000); + AddRecord(fdt, 99.27362429, 9.99988754, 10, 10000); + AddRecord(fdt, 99.36483232, 9.99980007, 10, 10000); + AddRecord(fdt, 99.45604030, 9.99968761, 10, 10000); + AddRecord(fdt, 99.54724820, 9.99955015, 10, 10000); + AddRecord(fdt, 99.63845603, 9.99938771, 10, 10000); + AddRecord(fdt, 99.72966375, 9.99920028, 10, 10000); + AddRecord(fdt, 99.82087136, 9.99898786, 10, 10000); + AddRecord(fdt, 99.91207885, 9.99875044, 10, 10000); + AddRecord(fdt, 99.00000000, 15.00000000, 15, 0); + AddRecord(fdt, 98.99907020, 15.00000000, 15, 100); + AddRecord(fdt, 98.99814041, 14.99999999, 15, 100); + AddRecord(fdt, 98.99721061, 14.99999998, 15, 100); + AddRecord(fdt, 98.99628082, 14.99999997, 15, 100); + AddRecord(fdt, 98.99535102, 14.99999995, 15, 100); + AddRecord(fdt, 98.99442122, 14.99999993, 15, 100); + AddRecord(fdt, 98.99349143, 14.99999991, 15, 100); + AddRecord(fdt, 98.99256163, 14.99999988, 15, 100); + AddRecord(fdt, 98.99163184, 14.99999985, 15, 100); + AddRecord(fdt, 98.99070204, 14.99999981, 15, 1000); + AddRecord(fdt, 98.98140408, 14.99999924, 15, 1000); + AddRecord(fdt, 98.97210612, 14.99999829, 15, 1000); + AddRecord(fdt, 98.96280817, 14.99999696, 15, 1000); + AddRecord(fdt, 98.95351021, 14.99999526, 15, 1000); + AddRecord(fdt, 98.94421225, 14.99999317, 15, 1000); + AddRecord(fdt, 98.93491429, 14.99999070, 15, 1000); + AddRecord(fdt, 98.92561633, 14.99998785, 15, 1000); + AddRecord(fdt, 98.91631838, 14.99998463, 15, 1000); + AddRecord(fdt, 98.90702042, 14.99998102, 15, 10000); + AddRecord(fdt, 98.81404087, 14.99992408, 15, 10000); + AddRecord(fdt, 98.72106139, 14.99982918, 15, 10000); + AddRecord(fdt, 98.62808200, 14.99969633, 15, 10000); + AddRecord(fdt, 98.53510275, 14.99952552, 15, 10000); + AddRecord(fdt, 98.44212366, 14.99931674, 15, 10000); + AddRecord(fdt, 98.34914477, 14.99907002, 15, 10000); + AddRecord(fdt, 98.25616610, 14.99878533, 15, 10000); + AddRecord(fdt, 98.16318770, 14.99846269, 15, 10000); + AddRecord(fdt, 98.07020960, 14.99810210, 15, 10000); + AddRecord(fdt, 99.00092980, 15.00000000, 15, 100); + AddRecord(fdt, 99.00185959, 14.99999999, 15, 100); + AddRecord(fdt, 99.00278939, 14.99999998, 15, 100); + AddRecord(fdt, 99.00371918, 14.99999997, 15, 100); + AddRecord(fdt, 99.00464898, 14.99999995, 15, 100); + AddRecord(fdt, 99.00557878, 14.99999993, 15, 100); + AddRecord(fdt, 99.00650857, 14.99999991, 15, 100); + AddRecord(fdt, 99.00743837, 14.99999988, 15, 100); + AddRecord(fdt, 99.00836816, 14.99999985, 15, 100); + AddRecord(fdt, 99.00929796, 14.99999981, 15, 1000); + AddRecord(fdt, 99.01859592, 14.99999924, 15, 1000); + AddRecord(fdt, 99.02789388, 14.99999829, 15, 1000); + AddRecord(fdt, 99.03719183, 14.99999696, 15, 1000); + AddRecord(fdt, 99.04648979, 14.99999526, 15, 1000); + AddRecord(fdt, 99.05578775, 14.99999317, 15, 1000); + AddRecord(fdt, 99.06508571, 14.99999070, 15, 1000); + AddRecord(fdt, 99.07438367, 14.99998785, 15, 1000); + AddRecord(fdt, 99.08368162, 14.99998463, 15, 1000); + AddRecord(fdt, 99.09297958, 14.99998102, 15, 10000); + AddRecord(fdt, 99.18595913, 14.99992408, 15, 10000); + AddRecord(fdt, 99.27893861, 14.99982918, 15, 10000); + AddRecord(fdt, 99.37191800, 14.99969633, 15, 10000); + AddRecord(fdt, 99.46489725, 14.99952552, 15, 10000); + AddRecord(fdt, 99.55787634, 14.99931674, 15, 10000); + AddRecord(fdt, 99.65085523, 14.99907002, 15, 10000); + AddRecord(fdt, 99.74383390, 14.99878533, 15, 10000); + AddRecord(fdt, 99.83681230, 14.99846269, 15, 10000); + AddRecord(fdt, 99.92979040, 14.99810210, 15, 10000); + AddRecord(fdt, 99.00000000, 20.00000000, 20, 0); + AddRecord(fdt, 98.99904441, 20.00000000, 20, 100); + AddRecord(fdt, 98.99808881, 19.99999999, 20, 100); + AddRecord(fdt, 98.99713322, 19.99999998, 20, 100); + AddRecord(fdt, 98.99617763, 19.99999996, 20, 100); + AddRecord(fdt, 98.99522204, 19.99999994, 20, 100); + AddRecord(fdt, 98.99426644, 19.99999991, 20, 100); + AddRecord(fdt, 98.99331085, 19.99999987, 20, 100); + AddRecord(fdt, 98.99235526, 19.99999984, 20, 100); + AddRecord(fdt, 98.99139966, 19.99999979, 20, 100); + AddRecord(fdt, 98.99044407, 19.99999974, 20, 1000); + AddRecord(fdt, 98.98088814, 19.99999897, 20, 1000); + AddRecord(fdt, 98.97133222, 19.99999768, 20, 1000); + AddRecord(fdt, 98.96177629, 19.99999588, 20, 1000); + AddRecord(fdt, 98.95222036, 19.99999356, 20, 1000); + AddRecord(fdt, 98.94266444, 19.99999073, 20, 1000); + AddRecord(fdt, 98.93310851, 19.99998738, 20, 1000); + AddRecord(fdt, 98.92355258, 19.99998351, 20, 1000); + AddRecord(fdt, 98.91399666, 19.99997913, 20, 1000); + AddRecord(fdt, 98.90444073, 19.99997424, 20, 10000); + AddRecord(fdt, 98.80888153, 19.99989695, 20, 10000); + AddRecord(fdt, 98.71332245, 19.99976813, 20, 10000); + AddRecord(fdt, 98.61776355, 19.99958778, 20, 10000); + AddRecord(fdt, 98.52220491, 19.99935591, 20, 10000); + AddRecord(fdt, 98.42664657, 19.99907252, 20, 10000); + AddRecord(fdt, 98.33108861, 19.99873760, 20, 10000); + AddRecord(fdt, 98.23553108, 19.99835116, 20, 10000); + AddRecord(fdt, 98.13997405, 19.99791319, 20, 10000); + AddRecord(fdt, 98.04441759, 19.99742371, 20, 10000); + AddRecord(fdt, 99.00095559, 20.00000000, 20, 100); + AddRecord(fdt, 99.00191119, 19.99999999, 20, 100); + AddRecord(fdt, 99.00286678, 19.99999998, 20, 100); + AddRecord(fdt, 99.00382237, 19.99999996, 20, 100); + AddRecord(fdt, 99.00477796, 19.99999994, 20, 100); + AddRecord(fdt, 99.00573356, 19.99999991, 20, 100); + AddRecord(fdt, 99.00668915, 19.99999987, 20, 100); + AddRecord(fdt, 99.00764474, 19.99999984, 20, 100); + AddRecord(fdt, 99.00860034, 19.99999979, 20, 100); + AddRecord(fdt, 99.00955593, 19.99999974, 20, 1000); + AddRecord(fdt, 99.01911186, 19.99999897, 20, 1000); + AddRecord(fdt, 99.02866778, 19.99999768, 20, 1000); + AddRecord(fdt, 99.03822371, 19.99999588, 20, 1000); + AddRecord(fdt, 99.04777964, 19.99999356, 20, 1000); + AddRecord(fdt, 99.05733556, 19.99999073, 20, 1000); + AddRecord(fdt, 99.06689149, 19.99998738, 20, 1000); + AddRecord(fdt, 99.07644742, 19.99998351, 20, 1000); + AddRecord(fdt, 99.08600334, 19.99997913, 20, 1000); + AddRecord(fdt, 99.09555927, 19.99997424, 20, 10000); + AddRecord(fdt, 99.19111847, 19.99989695, 20, 10000); + AddRecord(fdt, 99.28667755, 19.99976813, 20, 10000); + AddRecord(fdt, 99.38223645, 19.99958778, 20, 10000); + AddRecord(fdt, 99.47779509, 19.99935591, 20, 10000); + AddRecord(fdt, 99.57335343, 19.99907252, 20, 10000); + AddRecord(fdt, 99.66891139, 19.99873760, 20, 10000); + AddRecord(fdt, 99.76446892, 19.99835116, 20, 10000); + AddRecord(fdt, 99.86002595, 19.99791319, 20, 10000); + AddRecord(fdt, 99.95558241, 19.99742371, 20, 10000); + AddRecord(fdt, 99.00000000, 25.00000000, 25, 0); + AddRecord(fdt, 98.99900941, 25.00000000, 25, 100); + AddRecord(fdt, 98.99801882, 24.99999999, 25, 100); + AddRecord(fdt, 98.99702823, 24.99999997, 25, 100); + AddRecord(fdt, 98.99603765, 24.99999995, 25, 100); + AddRecord(fdt, 98.99504706, 24.99999992, 25, 100); + AddRecord(fdt, 98.99405647, 24.99999988, 25, 100); + AddRecord(fdt, 98.99306588, 24.99999984, 25, 100); + AddRecord(fdt, 98.99207529, 24.99999979, 25, 100); + AddRecord(fdt, 98.99108470, 24.99999973, 25, 100); + AddRecord(fdt, 98.99009411, 24.99999967, 25, 1000); + AddRecord(fdt, 98.98018823, 24.99999868, 25, 1000); + AddRecord(fdt, 98.97028235, 24.99999703, 25, 1000); + AddRecord(fdt, 98.96037646, 24.99999472, 25, 1000); + AddRecord(fdt, 98.95047058, 24.99999175, 25, 1000); + AddRecord(fdt, 98.94056469, 24.99998813, 25, 1000); + AddRecord(fdt, 98.93065881, 24.99998384, 25, 1000); + AddRecord(fdt, 98.92075293, 24.99997889, 25, 1000); + AddRecord(fdt, 98.91084705, 24.99997329, 25, 1000); + AddRecord(fdt, 98.90094117, 24.99996702, 25, 10000); + AddRecord(fdt, 98.80188244, 24.99986808, 25, 10000); + AddRecord(fdt, 98.70282392, 24.99970318, 25, 10000); + AddRecord(fdt, 98.60376572, 24.99947232, 25, 10000); + AddRecord(fdt, 98.50470795, 24.99917550, 25, 10000); + AddRecord(fdt, 98.40565070, 24.99881272, 25, 10000); + AddRecord(fdt, 98.30659409, 24.99838399, 25, 10000); + AddRecord(fdt, 98.20753821, 24.99788930, 25, 10000); + AddRecord(fdt, 98.10848319, 24.99732866, 25, 10000); + AddRecord(fdt, 98.00942911, 24.99670207, 25, 10000); + AddRecord(fdt, 99.00099059, 25.00000000, 25, 100); + AddRecord(fdt, 99.00198118, 24.99999999, 25, 100); + AddRecord(fdt, 99.00297177, 24.99999997, 25, 100); + AddRecord(fdt, 99.00396235, 24.99999995, 25, 100); + AddRecord(fdt, 99.00495294, 24.99999992, 25, 100); + AddRecord(fdt, 99.00594353, 24.99999988, 25, 100); + AddRecord(fdt, 99.00693412, 24.99999984, 25, 100); + AddRecord(fdt, 99.00792471, 24.99999979, 25, 100); + AddRecord(fdt, 99.00891530, 24.99999973, 25, 100); + AddRecord(fdt, 99.00990589, 24.99999967, 25, 1000); + AddRecord(fdt, 99.01981177, 24.99999868, 25, 1000); + AddRecord(fdt, 99.02971765, 24.99999703, 25, 1000); + AddRecord(fdt, 99.03962354, 24.99999472, 25, 1000); + AddRecord(fdt, 99.04952942, 24.99999175, 25, 1000); + AddRecord(fdt, 99.05943531, 24.99998813, 25, 1000); + AddRecord(fdt, 99.06934119, 24.99998384, 25, 1000); + AddRecord(fdt, 99.07924707, 24.99997889, 25, 1000); + AddRecord(fdt, 99.08915295, 24.99997329, 25, 1000); + AddRecord(fdt, 99.09905883, 24.99996702, 25, 10000); + AddRecord(fdt, 99.19811756, 24.99986808, 25, 10000); + AddRecord(fdt, 99.29717608, 24.99970318, 25, 10000); + AddRecord(fdt, 99.39623428, 24.99947232, 25, 10000); + AddRecord(fdt, 99.49529205, 24.99917550, 25, 10000); + AddRecord(fdt, 99.59434930, 24.99881272, 25, 10000); + AddRecord(fdt, 99.69340591, 24.99838399, 25, 10000); + AddRecord(fdt, 99.79246179, 24.99788930, 25, 10000); + AddRecord(fdt, 99.89151681, 24.99732866, 25, 10000); + AddRecord(fdt, 99.99057089, 24.99670207, 25, 10000); + AddRecord(fdt, 99.00000000, 30.00000000, 30, 0); + AddRecord(fdt, 98.99896358, 30.00000000, 30, 100); + AddRecord(fdt, 98.99792717, 29.99999998, 30, 100); + AddRecord(fdt, 98.99689075, 29.99999996, 30, 100); + AddRecord(fdt, 98.99585433, 29.99999993, 30, 100); + AddRecord(fdt, 98.99481792, 29.99999990, 30, 100); + AddRecord(fdt, 98.99378150, 29.99999985, 30, 100); + AddRecord(fdt, 98.99274508, 29.99999980, 30, 100); + AddRecord(fdt, 98.99170867, 29.99999974, 30, 100); + AddRecord(fdt, 98.99067225, 29.99999967, 30, 100); + AddRecord(fdt, 98.98963583, 29.99999959, 30, 1000); + AddRecord(fdt, 98.97927166, 29.99999837, 30, 1000); + AddRecord(fdt, 98.96890750, 29.99999633, 30, 1000); + AddRecord(fdt, 98.95854333, 29.99999347, 30, 1000); + AddRecord(fdt, 98.94817916, 29.99998980, 30, 1000); + AddRecord(fdt, 98.93781500, 29.99998531, 30, 1000); + AddRecord(fdt, 98.92745084, 29.99998001, 30, 1000); + AddRecord(fdt, 98.91708667, 29.99997389, 30, 1000); + AddRecord(fdt, 98.90672251, 29.99996696, 30, 1000); + AddRecord(fdt, 98.89635835, 29.99995921, 30, 10000); + AddRecord(fdt, 98.79271687, 29.99983682, 30, 10000); + AddRecord(fdt, 98.68907573, 29.99963285, 30, 10000); + AddRecord(fdt, 98.58543510, 29.99934728, 30, 10000); + AddRecord(fdt, 98.48179514, 29.99898014, 30, 10000); + AddRecord(fdt, 98.37815604, 29.99853140, 30, 10000); + AddRecord(fdt, 98.27451795, 29.99800109, 30, 10000); + AddRecord(fdt, 98.17088104, 29.99738919, 30, 10000); + AddRecord(fdt, 98.06724550, 29.99669572, 30, 10000); + AddRecord(fdt, 97.96361148, 29.99592067, 30, 10000); + AddRecord(fdt, 99.00103642, 30.00000000, 30, 100); + AddRecord(fdt, 99.00207283, 29.99999998, 30, 100); + AddRecord(fdt, 99.00310925, 29.99999996, 30, 100); + AddRecord(fdt, 99.00414567, 29.99999993, 30, 100); + AddRecord(fdt, 99.00518208, 29.99999990, 30, 100); + AddRecord(fdt, 99.00621850, 29.99999985, 30, 100); + AddRecord(fdt, 99.00725492, 29.99999980, 30, 100); + AddRecord(fdt, 99.00829133, 29.99999974, 30, 100); + AddRecord(fdt, 99.00932775, 29.99999967, 30, 100); + AddRecord(fdt, 99.01036417, 29.99999959, 30, 1000); + AddRecord(fdt, 99.02072834, 29.99999837, 30, 1000); + AddRecord(fdt, 99.03109250, 29.99999633, 30, 1000); + AddRecord(fdt, 99.04145667, 29.99999347, 30, 1000); + AddRecord(fdt, 99.05182084, 29.99998980, 30, 1000); + AddRecord(fdt, 99.06218500, 29.99998531, 30, 1000); + AddRecord(fdt, 99.07254916, 29.99998001, 30, 1000); + AddRecord(fdt, 99.08291333, 29.99997389, 30, 1000); + AddRecord(fdt, 99.09327749, 29.99996696, 30, 1000); + AddRecord(fdt, 99.10364165, 29.99995921, 30, 10000); + AddRecord(fdt, 99.20728313, 29.99983682, 30, 10000); + AddRecord(fdt, 99.31092427, 29.99963285, 30, 10000); + AddRecord(fdt, 99.41456490, 29.99934728, 30, 10000); + AddRecord(fdt, 99.51820486, 29.99898014, 30, 10000); + AddRecord(fdt, 99.62184396, 29.99853140, 30, 10000); + AddRecord(fdt, 99.72548205, 29.99800109, 30, 10000); + AddRecord(fdt, 99.82911896, 29.99738919, 30, 10000); + AddRecord(fdt, 99.93275450, 29.99669572, 30, 10000); + AddRecord(fdt, 100.03638852, 29.99592067, 30, 10000); + AddRecord(fdt, 99.00000000, 35.00000000, 35, 0); + AddRecord(fdt, 98.99890457, 35.00000000, 35, 100); + AddRecord(fdt, 98.99780914, 34.99999998, 35, 100); + AddRecord(fdt, 98.99671370, 34.99999996, 35, 100); + AddRecord(fdt, 98.99561827, 34.99999992, 35, 100); + AddRecord(fdt, 98.99452284, 34.99999988, 35, 100); + AddRecord(fdt, 98.99342741, 34.99999982, 35, 100); + AddRecord(fdt, 98.99233197, 34.99999976, 35, 100); + AddRecord(fdt, 98.99123654, 34.99999968, 35, 100); + AddRecord(fdt, 98.99014111, 34.99999960, 35, 100); + AddRecord(fdt, 98.98904568, 34.99999951, 35, 1000); + AddRecord(fdt, 98.97809136, 34.99999802, 35, 1000); + AddRecord(fdt, 98.96713704, 34.99999555, 35, 1000); + AddRecord(fdt, 98.95618272, 34.99999209, 35, 1000); + AddRecord(fdt, 98.94522840, 34.99998764, 35, 1000); + AddRecord(fdt, 98.93427408, 34.99998221, 35, 1000); + AddRecord(fdt, 98.92331976, 34.99997578, 35, 1000); + AddRecord(fdt, 98.91236545, 34.99996837, 35, 1000); + AddRecord(fdt, 98.90141113, 34.99995997, 35, 1000); + AddRecord(fdt, 98.89045682, 34.99995058, 35, 10000); + AddRecord(fdt, 98.78091391, 34.99980231, 35, 10000); + AddRecord(fdt, 98.67137153, 34.99955519, 35, 10000); + AddRecord(fdt, 98.56182993, 34.99920923, 35, 10000); + AddRecord(fdt, 98.45228939, 34.99876443, 35, 10000); + AddRecord(fdt, 98.34275017, 34.99822079, 35, 10000); + AddRecord(fdt, 98.23321252, 34.99757831, 35, 10000); + AddRecord(fdt, 98.12367673, 34.99683700, 35, 10000); + AddRecord(fdt, 98.01414303, 34.99599686, 35, 10000); + AddRecord(fdt, 97.90461171, 34.99505790, 35, 10000); + AddRecord(fdt, 99.00109543, 35.00000000, 35, 100); + AddRecord(fdt, 99.00219086, 34.99999998, 35, 100); + AddRecord(fdt, 99.00328630, 34.99999996, 35, 100); + AddRecord(fdt, 99.00438173, 34.99999992, 35, 100); + AddRecord(fdt, 99.00547716, 34.99999988, 35, 100); + AddRecord(fdt, 99.00657259, 34.99999982, 35, 100); + AddRecord(fdt, 99.00766803, 34.99999976, 35, 100); + AddRecord(fdt, 99.00876346, 34.99999968, 35, 100); + AddRecord(fdt, 99.00985889, 34.99999960, 35, 100); + AddRecord(fdt, 99.01095432, 34.99999951, 35, 1000); + AddRecord(fdt, 99.02190864, 34.99999802, 35, 1000); + AddRecord(fdt, 99.03286296, 34.99999555, 35, 1000); + AddRecord(fdt, 99.04381728, 34.99999209, 35, 1000); + AddRecord(fdt, 99.05477160, 34.99998764, 35, 1000); + AddRecord(fdt, 99.06572592, 34.99998221, 35, 1000); + AddRecord(fdt, 99.07668024, 34.99997578, 35, 1000); + AddRecord(fdt, 99.08763455, 34.99996837, 35, 1000); + AddRecord(fdt, 99.09858887, 34.99995997, 35, 1000); + AddRecord(fdt, 99.10954318, 34.99995058, 35, 10000); + AddRecord(fdt, 99.21908609, 34.99980231, 35, 10000); + AddRecord(fdt, 99.32862847, 34.99955519, 35, 10000); + AddRecord(fdt, 99.43817007, 34.99920923, 35, 10000); + AddRecord(fdt, 99.54771061, 34.99876443, 35, 10000); + AddRecord(fdt, 99.65724983, 34.99822079, 35, 10000); + AddRecord(fdt, 99.76678748, 34.99757831, 35, 10000); + AddRecord(fdt, 99.87632327, 34.99683700, 35, 10000); + AddRecord(fdt, 99.98585697, 34.99599686, 35, 10000); + AddRecord(fdt, 100.09538829, 34.99505790, 35, 10000); + AddRecord(fdt, 99.00000000, 40.00000000, 40, 0); + AddRecord(fdt, 98.99882896, 39.99999999, 40, 100); + AddRecord(fdt, 98.99765791, 39.99999998, 40, 100); + AddRecord(fdt, 98.99648687, 39.99999995, 40, 100); + AddRecord(fdt, 98.99531582, 39.99999991, 40, 100); + AddRecord(fdt, 98.99414478, 39.99999985, 40, 100); + AddRecord(fdt, 98.99297373, 39.99999979, 40, 100); + AddRecord(fdt, 98.99180269, 39.99999971, 40, 100); + AddRecord(fdt, 98.99063164, 39.99999962, 40, 100); + AddRecord(fdt, 98.98946060, 39.99999952, 40, 100); + AddRecord(fdt, 98.98828956, 39.99999941, 40, 1000); + AddRecord(fdt, 98.97657911, 39.99999763, 40, 1000); + AddRecord(fdt, 98.96486867, 39.99999468, 40, 1000); + AddRecord(fdt, 98.95315823, 39.99999053, 40, 1000); + AddRecord(fdt, 98.94144779, 39.99998521, 40, 1000); + AddRecord(fdt, 98.92973735, 39.99997870, 40, 1000); + AddRecord(fdt, 98.91802691, 39.99997101, 40, 1000); + AddRecord(fdt, 98.90631648, 39.99996214, 40, 1000); + AddRecord(fdt, 98.89460605, 39.99995208, 40, 1000); + AddRecord(fdt, 98.88289563, 39.99994084, 40, 10000); + AddRecord(fdt, 98.76579165, 39.99976336, 40, 10000); + AddRecord(fdt, 98.64868849, 39.99946756, 40, 10000); + AddRecord(fdt, 98.53158654, 39.99905345, 40, 10000); + AddRecord(fdt, 98.41448621, 39.99852102, 40, 10000); + AddRecord(fdt, 98.29738790, 39.99787028, 40, 10000); + AddRecord(fdt, 98.18029201, 39.99710124, 40, 10000); + AddRecord(fdt, 98.06319895, 39.99621390, 40, 10000); + AddRecord(fdt, 97.94610913, 39.99520827, 40, 10000); + AddRecord(fdt, 97.82902294, 39.99408435, 40, 10000); + AddRecord(fdt, 99.00117104, 39.99999999, 40, 100); + AddRecord(fdt, 99.00234209, 39.99999998, 40, 100); + AddRecord(fdt, 99.00351313, 39.99999995, 40, 100); + AddRecord(fdt, 99.00468418, 39.99999991, 40, 100); + AddRecord(fdt, 99.00585522, 39.99999985, 40, 100); + AddRecord(fdt, 99.00702627, 39.99999979, 40, 100); + AddRecord(fdt, 99.00819731, 39.99999971, 40, 100); + AddRecord(fdt, 99.00936836, 39.99999962, 40, 100); + AddRecord(fdt, 99.01053940, 39.99999952, 40, 100); + AddRecord(fdt, 99.01171044, 39.99999941, 40, 1000); + AddRecord(fdt, 99.02342089, 39.99999763, 40, 1000); + AddRecord(fdt, 99.03513133, 39.99999468, 40, 1000); + AddRecord(fdt, 99.04684177, 39.99999053, 40, 1000); + AddRecord(fdt, 99.05855221, 39.99998521, 40, 1000); + AddRecord(fdt, 99.07026265, 39.99997870, 40, 1000); + AddRecord(fdt, 99.08197309, 39.99997101, 40, 1000); + AddRecord(fdt, 99.09368352, 39.99996214, 40, 1000); + AddRecord(fdt, 99.10539395, 39.99995208, 40, 1000); + AddRecord(fdt, 99.11710437, 39.99994084, 40, 10000); + AddRecord(fdt, 99.23420835, 39.99976336, 40, 10000); + AddRecord(fdt, 99.35131151, 39.99946756, 40, 10000); + AddRecord(fdt, 99.46841346, 39.99905345, 40, 10000); + AddRecord(fdt, 99.58551379, 39.99852102, 40, 10000); + AddRecord(fdt, 99.70261210, 39.99787028, 40, 10000); + AddRecord(fdt, 99.81970799, 39.99710124, 40, 10000); + AddRecord(fdt, 99.93680105, 39.99621390, 40, 10000); + AddRecord(fdt, 100.05389087, 39.99520827, 40, 10000); + AddRecord(fdt, 100.17097706, 39.99408435, 40, 10000); + AddRecord(fdt, 99.00000000, 45.00000000, 45, 0); + AddRecord(fdt, 98.99873172, 44.99999999, 45, 100); + AddRecord(fdt, 98.99746344, 44.99999997, 45, 100); + AddRecord(fdt, 98.99619515, 44.99999994, 45, 100); + AddRecord(fdt, 98.99492687, 44.99999989, 45, 100); + AddRecord(fdt, 98.99365859, 44.99999982, 45, 100); + AddRecord(fdt, 98.99239031, 44.99999975, 45, 100); + AddRecord(fdt, 98.99112203, 44.99999965, 45, 100); + AddRecord(fdt, 98.98985375, 44.99999955, 45, 100); + AddRecord(fdt, 98.98858546, 44.99999943, 45, 100); + AddRecord(fdt, 98.98731718, 44.99999930, 45, 1000); + AddRecord(fdt, 98.97463437, 44.99999718, 45, 1000); + AddRecord(fdt, 98.96195155, 44.99999366, 45, 1000); + AddRecord(fdt, 98.94926874, 44.99998873, 45, 1000); + AddRecord(fdt, 98.93658593, 44.99998239, 45, 1000); + AddRecord(fdt, 98.92390312, 44.99997465, 45, 1000); + AddRecord(fdt, 98.91122031, 44.99996549, 45, 1000); + AddRecord(fdt, 98.89853752, 44.99995493, 45, 1000); + AddRecord(fdt, 98.88585472, 44.99994296, 45, 1000); + AddRecord(fdt, 98.87317193, 44.99992958, 45, 10000); + AddRecord(fdt, 98.74634448, 44.99971831, 45, 10000); + AddRecord(fdt, 98.61951828, 44.99936620, 45, 10000); + AddRecord(fdt, 98.49269394, 44.99887326, 45, 10000); + AddRecord(fdt, 98.36587208, 44.99823948, 45, 10000); + AddRecord(fdt, 98.23905334, 44.99746487, 45, 10000); + AddRecord(fdt, 98.11223832, 44.99654945, 45, 10000); + AddRecord(fdt, 97.98542764, 44.99549321, 45, 10000); + AddRecord(fdt, 97.85862194, 44.99429617, 45, 10000); + AddRecord(fdt, 97.73182183, 44.99295835, 45, 10000); + AddRecord(fdt, 99.00126828, 44.99999999, 45, 100); + AddRecord(fdt, 99.00253656, 44.99999997, 45, 100); + AddRecord(fdt, 99.00380485, 44.99999994, 45, 100); + AddRecord(fdt, 99.00507313, 44.99999989, 45, 100); + AddRecord(fdt, 99.00634141, 44.99999982, 45, 100); + AddRecord(fdt, 99.00760969, 44.99999975, 45, 100); + AddRecord(fdt, 99.00887797, 44.99999965, 45, 100); + AddRecord(fdt, 99.01014625, 44.99999955, 45, 100); + AddRecord(fdt, 99.01141454, 44.99999943, 45, 100); + AddRecord(fdt, 99.01268282, 44.99999930, 45, 1000); + AddRecord(fdt, 99.02536563, 44.99999718, 45, 1000); + AddRecord(fdt, 99.03804845, 44.99999366, 45, 1000); + AddRecord(fdt, 99.05073126, 44.99998873, 45, 1000); + AddRecord(fdt, 99.06341407, 44.99998239, 45, 1000); + AddRecord(fdt, 99.07609688, 44.99997465, 45, 1000); + AddRecord(fdt, 99.08877969, 44.99996549, 45, 1000); + AddRecord(fdt, 99.10146248, 44.99995493, 45, 1000); + AddRecord(fdt, 99.11414528, 44.99994296, 45, 1000); + AddRecord(fdt, 99.12682807, 44.99992958, 45, 10000); + AddRecord(fdt, 99.25365552, 44.99971831, 45, 10000); + AddRecord(fdt, 99.38048172, 44.99936620, 45, 10000); + AddRecord(fdt, 99.50730606, 44.99887326, 45, 10000); + AddRecord(fdt, 99.63412792, 44.99823948, 45, 10000); + AddRecord(fdt, 99.76094666, 44.99746487, 45, 10000); + AddRecord(fdt, 99.88776168, 44.99654945, 45, 10000); + AddRecord(fdt, 100.01457236, 44.99549321, 45, 10000); + AddRecord(fdt, 100.14137806, 44.99429617, 45, 10000); + AddRecord(fdt, 100.26817817, 44.99295835, 45, 10000); + AddRecord(fdt, 99.00000000, 50.00000000, 50, 0); + AddRecord(fdt, 98.99860522, 49.99999999, 50, 100); + AddRecord(fdt, 98.99721043, 49.99999997, 50, 100); + AddRecord(fdt, 98.99581565, 49.99999992, 50, 100); + AddRecord(fdt, 98.99442087, 49.99999987, 50, 100); + AddRecord(fdt, 98.99302609, 49.99999979, 50, 100); + AddRecord(fdt, 98.99163130, 49.99999970, 50, 100); + AddRecord(fdt, 98.99023652, 49.99999959, 50, 100); + AddRecord(fdt, 98.98884174, 49.99999946, 50, 100); + AddRecord(fdt, 98.98744696, 49.99999932, 50, 100); + AddRecord(fdt, 98.98605217, 49.99999916, 50, 1000); + AddRecord(fdt, 98.97210435, 49.99999665, 50, 1000); + AddRecord(fdt, 98.95815652, 49.99999246, 50, 1000); + AddRecord(fdt, 98.94420870, 49.99998659, 50, 1000); + AddRecord(fdt, 98.93026088, 49.99997904, 50, 1000); + AddRecord(fdt, 98.91631307, 49.99996982, 50, 1000); + AddRecord(fdt, 98.90236526, 49.99995892, 50, 1000); + AddRecord(fdt, 98.88841746, 49.99994635, 50, 1000); + AddRecord(fdt, 98.87446967, 49.99993210, 50, 1000); + AddRecord(fdt, 98.86052189, 49.99991617, 50, 10000); + AddRecord(fdt, 98.72104474, 49.99966469, 50, 10000); + AddRecord(fdt, 98.58156954, 49.99924555, 50, 10000); + AddRecord(fdt, 98.44209725, 49.99865877, 50, 10000); + AddRecord(fdt, 98.30262884, 49.99790435, 50, 10000); + AddRecord(fdt, 98.16316527, 49.99698230, 50, 10000); + AddRecord(fdt, 98.02370753, 49.99589264, 50, 10000); + AddRecord(fdt, 97.88425657, 49.99463537, 50, 10000); + AddRecord(fdt, 97.74481337, 49.99321051, 50, 10000); + AddRecord(fdt, 97.60537890, 49.99161808, 50, 10000); + AddRecord(fdt, 99.00139478, 49.99999999, 50, 100); + AddRecord(fdt, 99.00278957, 49.99999997, 50, 100); + AddRecord(fdt, 99.00418435, 49.99999992, 50, 100); + AddRecord(fdt, 99.00557913, 49.99999987, 50, 100); + AddRecord(fdt, 99.00697391, 49.99999979, 50, 100); + AddRecord(fdt, 99.00836870, 49.99999970, 50, 100); + AddRecord(fdt, 99.00976348, 49.99999959, 50, 100); + AddRecord(fdt, 99.01115826, 49.99999946, 50, 100); + AddRecord(fdt, 99.01255304, 49.99999932, 50, 100); + AddRecord(fdt, 99.01394783, 49.99999916, 50, 1000); + AddRecord(fdt, 99.02789565, 49.99999665, 50, 1000); + AddRecord(fdt, 99.04184348, 49.99999246, 50, 1000); + AddRecord(fdt, 99.05579130, 49.99998659, 50, 1000); + AddRecord(fdt, 99.06973912, 49.99997904, 50, 1000); + AddRecord(fdt, 99.08368693, 49.99996982, 50, 1000); + AddRecord(fdt, 99.09763474, 49.99995892, 50, 1000); + AddRecord(fdt, 99.11158254, 49.99994635, 50, 1000); + AddRecord(fdt, 99.12553033, 49.99993210, 50, 1000); + AddRecord(fdt, 99.13947811, 49.99991617, 50, 10000); + AddRecord(fdt, 99.27895526, 49.99966469, 50, 10000); + AddRecord(fdt, 99.41843046, 49.99924555, 50, 10000); + AddRecord(fdt, 99.55790275, 49.99865877, 50, 10000); + AddRecord(fdt, 99.69737116, 49.99790435, 50, 10000); + AddRecord(fdt, 99.83683473, 49.99698230, 50, 10000); + AddRecord(fdt, 99.97629247, 49.99589264, 50, 10000); + AddRecord(fdt, 100.11574343, 49.99463537, 50, 10000); + AddRecord(fdt, 100.25518663, 49.99321051, 50, 10000); + AddRecord(fdt, 100.39462110, 49.99161808, 50, 10000); + AddRecord(fdt, 99.00000000, 55.00000000, 55, 0); + AddRecord(fdt, 98.99843736, 54.99999999, 55, 100); + AddRecord(fdt, 98.99687471, 54.99999996, 55, 100); + AddRecord(fdt, 98.99531207, 54.99999991, 55, 100); + AddRecord(fdt, 98.99374943, 54.99999984, 55, 100); + AddRecord(fdt, 98.99218678, 54.99999975, 55, 100); + AddRecord(fdt, 98.99062414, 54.99999964, 55, 100); + AddRecord(fdt, 98.98906150, 54.99999951, 55, 100); + AddRecord(fdt, 98.98749885, 54.99999936, 55, 100); + AddRecord(fdt, 98.98593621, 54.99999919, 55, 100); + AddRecord(fdt, 98.98437357, 54.99999900, 55, 1000); + AddRecord(fdt, 98.96874714, 54.99999599, 55, 1000); + AddRecord(fdt, 98.95312071, 54.99999097, 55, 1000); + AddRecord(fdt, 98.93749428, 54.99998395, 55, 1000); + AddRecord(fdt, 98.92186787, 54.99997491, 55, 1000); + AddRecord(fdt, 98.90624146, 54.99996388, 55, 1000); + AddRecord(fdt, 98.89061506, 54.99995083, 55, 1000); + AddRecord(fdt, 98.87498867, 54.99993578, 55, 1000); + AddRecord(fdt, 98.85936229, 54.99991872, 55, 1000); + AddRecord(fdt, 98.84373593, 54.99989966, 55, 10000); + AddRecord(fdt, 98.68747341, 54.99959863, 55, 10000); + AddRecord(fdt, 98.53121402, 54.99909693, 55, 10000); + AddRecord(fdt, 98.37495930, 54.99839456, 55, 10000); + AddRecord(fdt, 98.21871082, 54.99749153, 55, 10000); + AddRecord(fdt, 98.06247014, 54.99638786, 55, 10000); + AddRecord(fdt, 97.90623882, 54.99508357, 55, 10000); + AddRecord(fdt, 97.75001841, 54.99357868, 55, 10000); + AddRecord(fdt, 97.59381047, 54.99187321, 55, 10000); + AddRecord(fdt, 97.43761655, 54.98996720, 55, 10000); + AddRecord(fdt, 99.00156264, 54.99999999, 55, 100); + AddRecord(fdt, 99.00312529, 54.99999996, 55, 100); + AddRecord(fdt, 99.00468793, 54.99999991, 55, 100); + AddRecord(fdt, 99.00625057, 54.99999984, 55, 100); + AddRecord(fdt, 99.00781322, 54.99999975, 55, 100); + AddRecord(fdt, 99.00937586, 54.99999964, 55, 100); + AddRecord(fdt, 99.01093850, 54.99999951, 55, 100); + AddRecord(fdt, 99.01250115, 54.99999936, 55, 100); + AddRecord(fdt, 99.01406379, 54.99999919, 55, 100); + AddRecord(fdt, 99.01562643, 54.99999900, 55, 1000); + AddRecord(fdt, 99.03125286, 54.99999599, 55, 1000); + AddRecord(fdt, 99.04687929, 54.99999097, 55, 1000); + AddRecord(fdt, 99.06250572, 54.99998395, 55, 1000); + AddRecord(fdt, 99.07813213, 54.99997491, 55, 1000); + AddRecord(fdt, 99.09375854, 54.99996388, 55, 1000); + AddRecord(fdt, 99.10938494, 54.99995083, 55, 1000); + AddRecord(fdt, 99.12501133, 54.99993578, 55, 1000); + AddRecord(fdt, 99.14063771, 54.99991872, 55, 1000); + AddRecord(fdt, 99.15626407, 54.99989966, 55, 10000); + AddRecord(fdt, 99.31252659, 54.99959863, 55, 10000); + AddRecord(fdt, 99.46878598, 54.99909693, 55, 10000); + AddRecord(fdt, 99.62504070, 54.99839456, 55, 10000); + AddRecord(fdt, 99.78128918, 54.99749153, 55, 10000); + AddRecord(fdt, 99.93752986, 54.99638786, 55, 10000); + AddRecord(fdt, 100.09376118, 54.99508357, 55, 10000); + AddRecord(fdt, 100.24998159, 54.99357868, 55, 10000); + AddRecord(fdt, 100.40618953, 54.99187321, 55, 10000); + AddRecord(fdt, 100.56238345, 54.98996720, 55, 10000); + AddRecord(fdt, 99.00000000, 60.00000000, 60, 0); + AddRecord(fdt, 98.99820789, 59.99999999, 60, 100); + AddRecord(fdt, 98.99641577, 59.99999995, 60, 100); + AddRecord(fdt, 98.99462366, 59.99999989, 60, 100); + AddRecord(fdt, 98.99283154, 59.99999981, 60, 100); + AddRecord(fdt, 98.99103943, 59.99999970, 60, 100); + AddRecord(fdt, 98.98924731, 59.99999956, 60, 100); + AddRecord(fdt, 98.98745520, 59.99999940, 60, 100); + AddRecord(fdt, 98.98566308, 59.99999922, 60, 100); + AddRecord(fdt, 98.98387097, 59.99999902, 60, 100); + AddRecord(fdt, 98.98207885, 59.99999878, 60, 1000); + AddRecord(fdt, 98.96415771, 59.99999514, 60, 1000); + AddRecord(fdt, 98.94623657, 59.99998906, 60, 1000); + AddRecord(fdt, 98.92831544, 59.99998055, 60, 1000); + AddRecord(fdt, 98.91039432, 59.99996961, 60, 1000); + AddRecord(fdt, 98.89247322, 59.99995624, 60, 1000); + AddRecord(fdt, 98.87455213, 59.99994043, 60, 1000); + AddRecord(fdt, 98.85663105, 59.99992220, 60, 1000); + AddRecord(fdt, 98.83871000, 59.99990153, 60, 1000); + AddRecord(fdt, 98.82078897, 59.99987843, 60, 10000); + AddRecord(fdt, 98.64158058, 59.99951374, 60, 10000); + AddRecord(fdt, 98.46237744, 59.99890593, 60, 10000); + AddRecord(fdt, 98.28318219, 59.99805501, 60, 10000); + AddRecord(fdt, 98.10399746, 59.99696101, 60, 10000); + AddRecord(fdt, 97.92482587, 59.99562396, 60, 10000); + AddRecord(fdt, 97.74567006, 59.99404388, 60, 10000); + AddRecord(fdt, 97.56653263, 59.99222081, 60, 10000); + AddRecord(fdt, 97.38741623, 59.99015480, 60, 10000); + AddRecord(fdt, 97.20832346, 59.98784591, 60, 10000); + AddRecord(fdt, 99.00179211, 59.99999999, 60, 100); + AddRecord(fdt, 99.00358423, 59.99999995, 60, 100); + AddRecord(fdt, 99.00537634, 59.99999989, 60, 100); + AddRecord(fdt, 99.00716846, 59.99999981, 60, 100); + AddRecord(fdt, 99.00896057, 59.99999970, 60, 100); + AddRecord(fdt, 99.01075269, 59.99999956, 60, 100); + AddRecord(fdt, 99.01254480, 59.99999940, 60, 100); + AddRecord(fdt, 99.01433692, 59.99999922, 60, 100); + AddRecord(fdt, 99.01612903, 59.99999902, 60, 100); + AddRecord(fdt, 99.01792115, 59.99999878, 60, 1000); + AddRecord(fdt, 99.03584229, 59.99999514, 60, 1000); + AddRecord(fdt, 99.05376343, 59.99998906, 60, 1000); + AddRecord(fdt, 99.07168456, 59.99998055, 60, 1000); + AddRecord(fdt, 99.08960568, 59.99996961, 60, 1000); + AddRecord(fdt, 99.10752678, 59.99995624, 60, 1000); + AddRecord(fdt, 99.12544787, 59.99994043, 60, 1000); + AddRecord(fdt, 99.14336895, 59.99992220, 60, 1000); + AddRecord(fdt, 99.16129000, 59.99990153, 60, 1000); + AddRecord(fdt, 99.17921103, 59.99987843, 60, 10000); + AddRecord(fdt, 99.35841942, 59.99951374, 60, 10000); + AddRecord(fdt, 99.53762256, 59.99890593, 60, 10000); + AddRecord(fdt, 99.71681781, 59.99805501, 60, 10000); + AddRecord(fdt, 99.89600254, 59.99696101, 60, 10000); + AddRecord(fdt, 100.07517413, 59.99562396, 60, 10000); + AddRecord(fdt, 100.25432994, 59.99404388, 60, 10000); + AddRecord(fdt, 100.43346737, 59.99222081, 60, 10000); + AddRecord(fdt, 100.61258377, 59.99015480, 60, 10000); + AddRecord(fdt, 100.79167654, 59.98784591, 60, 10000); + AddRecord(fdt, 99.00000000, 65.00000000, 65, 0); + AddRecord(fdt, 98.99788026, 64.99999998, 65, 100); + AddRecord(fdt, 98.99576051, 64.99999994, 65, 100); + AddRecord(fdt, 98.99364077, 64.99999986, 65, 100); + AddRecord(fdt, 98.99152103, 64.99999976, 65, 100); + AddRecord(fdt, 98.98940129, 64.99999962, 65, 100); + AddRecord(fdt, 98.98728154, 64.99999946, 65, 100); + AddRecord(fdt, 98.98516180, 64.99999926, 65, 100); + AddRecord(fdt, 98.98304206, 64.99999904, 65, 100); + AddRecord(fdt, 98.98092231, 64.99999878, 65, 100); + AddRecord(fdt, 98.97880257, 64.99999850, 65, 1000); + AddRecord(fdt, 98.95760515, 64.99999399, 65, 1000); + AddRecord(fdt, 98.93640773, 64.99998647, 65, 1000); + AddRecord(fdt, 98.91521033, 64.99997594, 65, 1000); + AddRecord(fdt, 98.89401295, 64.99996241, 65, 1000); + AddRecord(fdt, 98.87281559, 64.99994587, 65, 1000); + AddRecord(fdt, 98.85161827, 64.99992632, 65, 1000); + AddRecord(fdt, 98.83042097, 64.99990376, 65, 1000); + AddRecord(fdt, 98.80922371, 64.99987820, 65, 1000); + AddRecord(fdt, 98.78802650, 64.99984963, 65, 10000); + AddRecord(fdt, 98.57605776, 64.99939853, 65, 10000); + AddRecord(fdt, 98.36409856, 64.99864671, 65, 10000); + AddRecord(fdt, 98.15215365, 64.99759420, 65, 10000); + AddRecord(fdt, 97.94022780, 64.99624104, 65, 10000); + AddRecord(fdt, 97.72832577, 64.99458728, 65, 10000); + AddRecord(fdt, 97.51645231, 64.99263297, 65, 10000); + AddRecord(fdt, 97.30461217, 64.99037819, 65, 10000); + AddRecord(fdt, 97.09281011, 64.98782302, 65, 10000); + AddRecord(fdt, 96.88105085, 64.98496755, 65, 10000); + AddRecord(fdt, 99.00211974, 64.99999998, 65, 100); + AddRecord(fdt, 99.00423949, 64.99999994, 65, 100); + AddRecord(fdt, 99.00635923, 64.99999986, 65, 100); + AddRecord(fdt, 99.00847897, 64.99999976, 65, 100); + AddRecord(fdt, 99.01059871, 64.99999962, 65, 100); + AddRecord(fdt, 99.01271846, 64.99999946, 65, 100); + AddRecord(fdt, 99.01483820, 64.99999926, 65, 100); + AddRecord(fdt, 99.01695794, 64.99999904, 65, 100); + AddRecord(fdt, 99.01907769, 64.99999878, 65, 100); + AddRecord(fdt, 99.02119743, 64.99999850, 65, 1000); + AddRecord(fdt, 99.04239485, 64.99999399, 65, 1000); + AddRecord(fdt, 99.06359227, 64.99998647, 65, 1000); + AddRecord(fdt, 99.08478967, 64.99997594, 65, 1000); + AddRecord(fdt, 99.10598705, 64.99996241, 65, 1000); + AddRecord(fdt, 99.12718441, 64.99994587, 65, 1000); + AddRecord(fdt, 99.14838173, 64.99992632, 65, 1000); + AddRecord(fdt, 99.16957903, 64.99990376, 65, 1000); + AddRecord(fdt, 99.19077629, 64.99987820, 65, 1000); + AddRecord(fdt, 99.21197350, 64.99984963, 65, 10000); + AddRecord(fdt, 99.42394224, 64.99939853, 65, 10000); + AddRecord(fdt, 99.63590144, 64.99864671, 65, 10000); + AddRecord(fdt, 99.84784635, 64.99759420, 65, 10000); + AddRecord(fdt, 100.05977220, 64.99624104, 65, 10000); + AddRecord(fdt, 100.27167423, 64.99458728, 65, 10000); + AddRecord(fdt, 100.48354769, 64.99263297, 65, 10000); + AddRecord(fdt, 100.69538783, 64.99037819, 65, 10000); + AddRecord(fdt, 100.90718989, 64.98782302, 65, 10000); + AddRecord(fdt, 101.11894915, 64.98496755, 65, 10000); + AddRecord(fdt, 99.00000000, 70.00000000, 70, 0); + AddRecord(fdt, 98.99738128, 69.99999998, 70, 100); + AddRecord(fdt, 98.99476255, 69.99999992, 70, 100); + AddRecord(fdt, 98.99214383, 69.99999983, 70, 100); + AddRecord(fdt, 98.98952511, 69.99999969, 70, 100); + AddRecord(fdt, 98.98690638, 69.99999952, 70, 100); + AddRecord(fdt, 98.98428766, 69.99999931, 70, 100); + AddRecord(fdt, 98.98166893, 69.99999906, 70, 100); + AddRecord(fdt, 98.97905021, 69.99999877, 70, 100); + AddRecord(fdt, 98.97643149, 69.99999844, 70, 100); + AddRecord(fdt, 98.97381276, 69.99999808, 70, 1000); + AddRecord(fdt, 98.94762554, 69.99999230, 70, 1000); + AddRecord(fdt, 98.92143833, 69.99998268, 70, 1000); + AddRecord(fdt, 98.89525116, 69.99996920, 70, 1000); + AddRecord(fdt, 98.86906402, 69.99995188, 70, 1000); + AddRecord(fdt, 98.84287693, 69.99993070, 70, 1000); + AddRecord(fdt, 98.81668989, 69.99990568, 70, 1000); + AddRecord(fdt, 98.79050293, 69.99987681, 70, 1000); + AddRecord(fdt, 98.76431604, 69.99984408, 70, 1000); + AddRecord(fdt, 98.73812924, 69.99980751, 70, 10000); + AddRecord(fdt, 98.47626814, 69.99923006, 70, 10000); + AddRecord(fdt, 98.21442637, 69.99826767, 70, 10000); + AddRecord(fdt, 97.95261356, 69.99692041, 70, 10000); + AddRecord(fdt, 97.69083937, 69.99518835, 70, 10000); + AddRecord(fdt, 97.42911344, 69.99307159, 70, 10000); + AddRecord(fdt, 97.16744540, 69.99057025, 70, 10000); + AddRecord(fdt, 96.90584486, 69.98768447, 70, 10000); + AddRecord(fdt, 96.64432141, 69.98441443, 70, 10000); + AddRecord(fdt, 96.38288464, 69.98076031, 70, 10000); + AddRecord(fdt, 99.00261872, 69.99999998, 70, 100); + AddRecord(fdt, 99.00523745, 69.99999992, 70, 100); + AddRecord(fdt, 99.00785617, 69.99999983, 70, 100); + AddRecord(fdt, 99.01047489, 69.99999969, 70, 100); + AddRecord(fdt, 99.01309362, 69.99999952, 70, 100); + AddRecord(fdt, 99.01571234, 69.99999931, 70, 100); + AddRecord(fdt, 99.01833107, 69.99999906, 70, 100); + AddRecord(fdt, 99.02094979, 69.99999877, 70, 100); + AddRecord(fdt, 99.02356851, 69.99999844, 70, 100); + AddRecord(fdt, 99.02618724, 69.99999808, 70, 1000); + AddRecord(fdt, 99.05237446, 69.99999230, 70, 1000); + AddRecord(fdt, 99.07856167, 69.99998268, 70, 1000); + AddRecord(fdt, 99.10474884, 69.99996920, 70, 1000); + AddRecord(fdt, 99.13093598, 69.99995188, 70, 1000); + AddRecord(fdt, 99.15712307, 69.99993070, 70, 1000); + AddRecord(fdt, 99.18331011, 69.99990568, 70, 1000); + AddRecord(fdt, 99.20949707, 69.99987681, 70, 1000); + AddRecord(fdt, 99.23568396, 69.99984408, 70, 1000); + AddRecord(fdt, 99.26187076, 69.99980751, 70, 10000); + AddRecord(fdt, 99.52373186, 69.99923006, 70, 10000); + AddRecord(fdt, 99.78557363, 69.99826767, 70, 10000); + AddRecord(fdt, 100.04738644, 69.99692041, 70, 10000); + AddRecord(fdt, 100.30916063, 69.99518835, 70, 10000); + AddRecord(fdt, 100.57088656, 69.99307159, 70, 10000); + AddRecord(fdt, 100.83255460, 69.99057025, 70, 10000); + AddRecord(fdt, 101.09415514, 69.98768447, 70, 10000); + AddRecord(fdt, 101.35567859, 69.98441443, 70, 10000); + AddRecord(fdt, 101.61711536, 69.98076031, 70, 10000); + AddRecord(fdt, 99.00000000, 75.00000000, 75, 0); + AddRecord(fdt, 98.99654003, 74.99999997, 75, 100); + AddRecord(fdt, 98.99308007, 74.99999990, 75, 100); + AddRecord(fdt, 98.98962010, 74.99999976, 75, 100); + AddRecord(fdt, 98.98616013, 74.99999958, 75, 100); + AddRecord(fdt, 98.98270016, 74.99999935, 75, 100); + AddRecord(fdt, 98.97924020, 74.99999906, 75, 100); + AddRecord(fdt, 98.97578023, 74.99999872, 75, 100); + AddRecord(fdt, 98.97232026, 74.99999833, 75, 100); + AddRecord(fdt, 98.96886030, 74.99999788, 75, 100); + AddRecord(fdt, 98.96540033, 74.99999739, 75, 1000); + AddRecord(fdt, 98.93080068, 74.99998955, 75, 1000); + AddRecord(fdt, 98.89620108, 74.99997648, 75, 1000); + AddRecord(fdt, 98.86160155, 74.99995819, 75, 1000); + AddRecord(fdt, 98.82700212, 74.99993468, 75, 1000); + AddRecord(fdt, 98.79240280, 74.99990593, 75, 1000); + AddRecord(fdt, 98.75780362, 74.99987197, 75, 1000); + AddRecord(fdt, 98.72320461, 74.99983277, 75, 1000); + AddRecord(fdt, 98.68860579, 74.99978835, 75, 1000); + AddRecord(fdt, 98.65400718, 74.99973871, 75, 10000); + AddRecord(fdt, 98.30803790, 74.99895487, 75, 10000); + AddRecord(fdt, 97.96211569, 74.99764855, 75, 10000); + AddRecord(fdt, 97.61626407, 74.99581990, 75, 10000); + AddRecord(fdt, 97.27050652, 74.99346910, 75, 10000); + AddRecord(fdt, 96.92486648, 74.99059640, 75, 10000); + AddRecord(fdt, 96.57936735, 74.98720211, 75, 10000); + AddRecord(fdt, 96.23403246, 74.98328656, 75, 10000); + //AddRecord(fdt,95.88888509,74.97885017,75,10000); + //AddRecord(fdt,95.54394842,74.97389341,75,10000); + AddRecord(fdt, 99.00345997, 74.99999997, 75, 100); + AddRecord(fdt, 99.00691993, 74.99999990, 75, 100); + AddRecord(fdt, 99.01037990, 74.99999976, 75, 100); + AddRecord(fdt, 99.01383987, 74.99999958, 75, 100); + AddRecord(fdt, 99.01729984, 74.99999935, 75, 100); + AddRecord(fdt, 99.02075980, 74.99999906, 75, 100); + AddRecord(fdt, 99.02421977, 74.99999872, 75, 100); + AddRecord(fdt, 99.02767974, 74.99999833, 75, 100); + AddRecord(fdt, 99.03113970, 74.99999788, 75, 100); + AddRecord(fdt, 99.03459967, 74.99999739, 75, 1000); + AddRecord(fdt, 99.06919932, 74.99998955, 75, 1000); + AddRecord(fdt, 99.10379892, 74.99997648, 75, 1000); + AddRecord(fdt, 99.13839845, 74.99995819, 75, 1000); + AddRecord(fdt, 99.17299788, 74.99993468, 75, 1000); + AddRecord(fdt, 99.20759720, 74.99990593, 75, 1000); + AddRecord(fdt, 99.24219638, 74.99987197, 75, 1000); + AddRecord(fdt, 99.27679539, 74.99983277, 75, 1000); + AddRecord(fdt, 99.31139421, 74.99978835, 75, 1000); + AddRecord(fdt, 99.34599282, 74.99973871, 75, 10000); + AddRecord(fdt, 99.69196210, 74.99895487, 75, 10000); + AddRecord(fdt, 100.03788431, 74.99764855, 75, 10000); + AddRecord(fdt, 100.38373593, 74.99581990, 75, 10000); + AddRecord(fdt, 100.72949348, 74.99346910, 75, 10000); + AddRecord(fdt, 101.07513352, 74.99059640, 75, 10000); + AddRecord(fdt, 101.42063265, 74.98720211, 75, 10000); + AddRecord(fdt, 101.76596754, 74.98328656, 75, 10000); + //AddRecord(fdt,102.11111491,74.97885017,75,10000); + //AddRecord(fdt,102.45605158,74.97389341,75,10000); + AddRecord(fdt, 99.00000000, 80.00000000, 80, 0); + AddRecord(fdt, 98.99484363, 79.99999996, 80, 100); + AddRecord(fdt, 98.98968726, 79.99999984, 80, 100); + AddRecord(fdt, 98.98453089, 79.99999964, 80, 100); + AddRecord(fdt, 98.97937452, 79.99999937, 80, 100); + AddRecord(fdt, 98.97421815, 79.99999901, 80, 100); + AddRecord(fdt, 98.96906178, 79.99999857, 80, 100); + AddRecord(fdt, 98.96390541, 79.99999806, 80, 100); + AddRecord(fdt, 98.95874904, 79.99999746, 80, 100); + AddRecord(fdt, 98.95359267, 79.99999679, 80, 100); + AddRecord(fdt, 98.94843631, 79.99999603, 80, 1000); + AddRecord(fdt, 98.89687269, 79.99998413, 80, 1000); + AddRecord(fdt, 98.84530924, 79.99996428, 80, 1000); + AddRecord(fdt, 98.79374604, 79.99993650, 80, 1000); + AddRecord(fdt, 98.74218315, 79.99990078, 80, 1000); + AddRecord(fdt, 98.69062068, 79.99985713, 80, 1000); + AddRecord(fdt, 98.63905868, 79.99980554, 80, 1000); + AddRecord(fdt, 98.58749726, 79.99974601, 80, 1000); + AddRecord(fdt, 98.53593648, 79.99967854, 80, 1000); + AddRecord(fdt, 98.48437643, 79.99960314, 80, 10000); + AddRecord(fdt, 97.96883385, 79.99841266, 80, 10000); + AddRecord(fdt, 97.45345317, 79.99642883, 80, 10000); + AddRecord(fdt, 96.93831514, 79.99365213, 80, 10000); + AddRecord(fdt, 96.42350029, 79.99008323, 80, 10000); + //AddRecord(fdt,95.90908884,79.98572295,80,10000); + //AddRecord(fdt,95.39516063,79.98057235,80,10000); + //AddRecord(fdt,94.88179503,79.97463263,80,10000); + //AddRecord(fdt,94.36907090,79.96790520,80,10000); + //AddRecord(fdt,93.85706649,79.96039163,80,10000); + AddRecord(fdt, 99.00515637, 79.99999996, 80, 100); + AddRecord(fdt, 99.01031274, 79.99999984, 80, 100); + AddRecord(fdt, 99.01546911, 79.99999964, 80, 100); + AddRecord(fdt, 99.02062548, 79.99999937, 80, 100); + AddRecord(fdt, 99.02578185, 79.99999901, 80, 100); + AddRecord(fdt, 99.03093822, 79.99999857, 80, 100); + AddRecord(fdt, 99.03609459, 79.99999806, 80, 100); + AddRecord(fdt, 99.04125096, 79.99999746, 80, 100); + AddRecord(fdt, 99.04640733, 79.99999679, 80, 100); + AddRecord(fdt, 99.05156369, 79.99999603, 80, 1000); + AddRecord(fdt, 99.10312731, 79.99998413, 80, 1000); + AddRecord(fdt, 99.15469076, 79.99996428, 80, 1000); + AddRecord(fdt, 99.20625396, 79.99993650, 80, 1000); + AddRecord(fdt, 99.25781685, 79.99990078, 80, 1000); + AddRecord(fdt, 99.30937932, 79.99985713, 80, 1000); + AddRecord(fdt, 99.36094132, 79.99980554, 80, 1000); + AddRecord(fdt, 99.41250274, 79.99974601, 80, 1000); + AddRecord(fdt, 99.46406352, 79.99967854, 80, 1000); + AddRecord(fdt, 99.51562357, 79.99960314, 80, 10000); + AddRecord(fdt, 100.03116615, 79.99841266, 80, 10000); + AddRecord(fdt, 100.54654683, 79.99642883, 80, 10000); + AddRecord(fdt, 101.06168486, 79.99365213, 80, 10000); + AddRecord(fdt, 101.57649971, 79.99008323, 80, 10000); + //AddRecord(fdt,102.09091116,79.98572295,80,10000); + //AddRecord(fdt,102.60483937,79.98057235,80,10000); + //AddRecord(fdt,103.11820497,79.97463263,80,10000); + //AddRecord(fdt,103.63092910,79.96790520,80,10000); + //AddRecord(fdt,104.14293351,79.96039163,80,10000); + AddRecord(fdt, 99.00000000, 85.00000000, 85, 0); + AddRecord(fdt, 98.98972728, 84.99999992, 85, 100); + AddRecord(fdt, 98.97945457, 84.99999968, 85, 100); + AddRecord(fdt, 98.96918185, 84.99999928, 85, 100); + AddRecord(fdt, 98.95890914, 84.99999872, 85, 100); + AddRecord(fdt, 98.94863643, 84.99999800, 85, 100); + AddRecord(fdt, 98.93836372, 84.99999712, 85, 100); + AddRecord(fdt, 98.92809102, 84.99999608, 85, 100); + AddRecord(fdt, 98.91781832, 84.99999488, 85, 100); + AddRecord(fdt, 98.90754562, 84.99999352, 85, 100); + AddRecord(fdt, 98.89727293, 84.99999200, 85, 1000); + AddRecord(fdt, 98.79454652, 84.99996802, 85, 1000); + AddRecord(fdt, 98.69182143, 84.99992804, 85, 1000); + AddRecord(fdt, 98.58909829, 84.99987206, 85, 1000); + AddRecord(fdt, 98.48637778, 84.99980010, 85, 1000); + AddRecord(fdt, 98.38366055, 84.99971215, 85, 1000); + AddRecord(fdt, 98.28094724, 84.99960820, 85, 1000); + AddRecord(fdt, 98.17823853, 84.99948827, 85, 1000); + AddRecord(fdt, 98.07553505, 84.99935235, 85, 1000); + AddRecord(fdt, 97.97283747, 84.99920045, 85, 10000); + AddRecord(fdt, 96.94632975, 84.99680257, 85, 10000); + //AddRecord(fdt,95.92112913,84.99280864,85,10000); + //AddRecord(fdt,94.89788293,84.98722250,85,10000); + //AddRecord(fdt,93.87723102,84.98004944,85,10000); + //AddRecord(fdt,92.85980349,84.97129626,85,10000); + //AddRecord(fdt,91.84621835,84.96097120,85,10000); + //AddRecord(fdt,90.83707941,84.94908388,85,10000); + //AddRecord(fdt,89.83297419,84.93564531,85,10000); + //AddRecord(fdt,88.83447205,84.92066781,85,10000); + AddRecord(fdt, 99.01027272, 84.99999992, 85, 100); + AddRecord(fdt, 99.02054543, 84.99999968, 85, 100); + AddRecord(fdt, 99.03081815, 84.99999928, 85, 100); + AddRecord(fdt, 99.04109086, 84.99999872, 85, 100); + AddRecord(fdt, 99.05136357, 84.99999800, 85, 100); + AddRecord(fdt, 99.06163628, 84.99999712, 85, 100); + AddRecord(fdt, 99.07190898, 84.99999608, 85, 100); + AddRecord(fdt, 99.08218168, 84.99999488, 85, 100); + AddRecord(fdt, 99.09245438, 84.99999352, 85, 100); + AddRecord(fdt, 99.10272707, 84.99999200, 85, 1000); + AddRecord(fdt, 99.20545348, 84.99996802, 85, 1000); + AddRecord(fdt, 99.30817857, 84.99992804, 85, 1000); + AddRecord(fdt, 99.41090171, 84.99987206, 85, 1000); + AddRecord(fdt, 99.51362222, 84.99980010, 85, 1000); + AddRecord(fdt, 99.61633945, 84.99971215, 85, 1000); + AddRecord(fdt, 99.71905276, 84.99960820, 85, 1000); + AddRecord(fdt, 99.82176147, 84.99948827, 85, 1000); + AddRecord(fdt, 99.92446495, 84.99935235, 85, 1000); + AddRecord(fdt, 100.02716253, 84.99920045, 85, 10000); + AddRecord(fdt, 101.05367025, 84.99680257, 85, 10000); + //AddRecord(fdt,102.07887087,84.99280864,85,10000); + //AddRecord(fdt,103.10211707,84.98722250,85,10000); + //AddRecord(fdt,104.12276898,84.98004944,85,10000); + //AddRecord(fdt,105.14019651,84.97129626,85,10000); + //AddRecord(fdt,106.15378165,84.96097120,85,10000); + //AddRecord(fdt,107.16292059,84.94908388,85,10000); + //AddRecord(fdt,108.16702581,84.93564531,85,10000); + //AddRecord(fdt,109.16552795,84.92066781,85,10000); + } + + private void AddRecord(FeatureDataTable fdt, double longitude, double latitude, int startLatitude, int interval) + { + var dr = fdt.NewRow(); + dr["Latitude"] = startLatitude; + dr["Interval"] = interval; + dr.Geometry = new NetTopologySuite.Geometries.Point(longitude, latitude); + + fdt.AddRow(dr); + } + + [TestCase(10000)] + [TestCase(1000)] + [TestCase(100)] + public void TestWebMercator(int interval) + { + _map.SRID = 3857; + + foreach (var lyr in _map.Layers) + { + var layer = lyr as VectorLayer; + if (layer != null) + layer.TargetSRID = _map.SRID; + } + + foreach (var lyr in _map.BackgroundLayer) + lyr.Enabled = true; + + var scaleBar = (SharpMap.Rendering.Decoration.ScaleBar.ScaleBar) _map.Decorations[0]; + scaleBar.MapUnit = (int) Unit.Meter; + + GenerateScaleBarImages("WebMerc", null, interval); + + foreach (var testLat in _testLatitudes) + GenerateScaleBarImages("WebMerc", testLat, interval); + } + + [TestCase(10000)] + [TestCase(1000)] + [TestCase(100)] + public void TestPcs(int interval) + { + _map.SRID = 24047; + + foreach (var lyr in _map.Layers) + if (lyr is VectorLayer) + ((VectorLayer) lyr).TargetSRID = _map.SRID; + + foreach (var lyr in _map.BackgroundLayer) + lyr.Enabled = false; + + var scaleBar = (SharpMap.Rendering.Decoration.ScaleBar.ScaleBar) _map.Decorations[0]; + scaleBar.MapUnit = (int) Unit.Meter; + + //GenerateScaleBarImages("Utm47N", null, interval); + + foreach (var testLat in _testLatitudes) + GenerateScaleBarImages("Utm47N", testLat, interval); + } + + [TestCase(10000)] + [TestCase(1000)] + [TestCase(100)] + public void TestWgs84(int interval) + { + _map.SRID = 4326; + + foreach (var lyr in _map.Layers) + if (lyr is VectorLayer) + ((VectorLayer) lyr).TargetSRID = _map.SRID; + + foreach (var lyr in _map.BackgroundLayer) + lyr.Enabled = false; + + var scaleBar = (SharpMap.Rendering.Decoration.ScaleBar.ScaleBar) _map.Decorations[0]; + scaleBar.MapUnit = (int) Unit.Degree; + + GenerateScaleBarImages("Wgs84", null, interval); + + foreach (var testLat in _testLatitudes) + GenerateScaleBarImages("Wgs84", testLat, interval); + } + + + private void GenerateScaleBarImages(string srDescr, int? centerLat, int interval) + { + var vectorLyr = (VectorLayer) _map.Layers[0]; + + // apply Filter Delegate and zoom to resulting extents + // interval = distance in metres between points stepping out from common meridian + var gfp = (GeometryFeatureProvider) vectorLyr.DataSource; + if (!centerLat.HasValue) + gfp.FilterDelegate = row => ((int) row["Interval"] == interval || (int) row["Interval"] == 0); + else + gfp.FilterDelegate = row => (((int) row["Latitude"]) == (int) centerLat.Value && + ((int) row["Interval"] == interval || (int) row["Interval"] == 0)); + + var geometries = vectorLyr.DataSource.GetGeometriesInView(new Envelope(-180, 180, -90, 90)); + var box = new Envelope(); + foreach (var geometry in geometries) + box.ExpandToInclude(geometry.EnvelopeInternal); + + if (vectorLyr.CoordinateTransformation != null) + box = GeometryTransform.TransformBox(box, vectorLyr.CoordinateTransformation.MathTransform); + + _map.ZoomToBox(box); + + // generate image + var img = _map.GetMap(); + var strLat = (centerLat.HasValue) ? $"Lat_{centerLat:D2}" : "AllPoints"; + img.Save( + Path.Combine(Path.GetTempPath(), "SharpMap", + $"ScaleBarTest_{srDescr}_{strLat}_Interval_{interval:D5}.bmp"), + System.Drawing.Imaging.ImageFormat.Bmp); + } + } +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 0f21f78a..186543ce 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -1,371 +1,372 @@ - - - - Debug - AnyCPU - {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7} - Library - Properties - UnitTests - UnitTests - - - 3.5 - - - v4.5.2 - - - ..\ - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - false - false - - - pdbonly - true - bin\ - TRACE - prompt - 4 - true - false - - - pdbonly - - bin\ - TRACE;LINUX - prompt - 4 - true - false - - - - - - ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll - True - - - ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll - True - - - ..\packages\GDAL.1.11.1\lib\net40\gdalconst_csharp.dll - True - - - ..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll - True - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - - - ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll - True - - - ..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - ..\packages\NetTopologySuite.Features.1.15.0\lib\net40\NetTopologySuite.Features.dll - - - ..\packages\NetTopologySuite.IO.PostGis.1.15.0\lib\net40-client\NetTopologySuite.IO.PostGis.dll - - - ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll - True - - - False - ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - - - ..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll - True - - - ..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll - True - - - ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll - - - - - ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net451\System.Data.SQLite.dll - - - - False - ..\packages\Rx-Core.2.2.4\lib\net40\System.Reactive.Core.dll - - - False - ..\packages\Rx-Interfaces.2.2.4\lib\net40\System.Reactive.Interfaces.dll - - - False - ..\packages\Rx-Linq.2.2.4\lib\net40\System.Reactive.Linq.dll - - - False - ..\packages\Rx-PlatformServices.2.2.4\lib\net40\System.Reactive.PlatformServices.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - True - True - Settings.settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} - SharpMap.SqlServerSpatialObjects - - - - - {AF0594AB-FC1D-47E4-8CDD-361CDC621A36} - SharpMap.Data.Providers.GeoPackage - - - {F9DA6934-413F-4744-84CE-923D901F60E6} - SharpMap.Data.Providers.Kml - - - {9BBED556-40D8-4DDC-AC11-7B03300E2A2E} - SharpMap.Data.Providers.OracleSpatial - - - {d84f31ed-3d81-42f2-9190-3d021d6038a0} - SharpMap.Layers.BruTile - - - {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB} - SharpMap.Serialization - - - {723F9FD5-8424-4EEE-BA92-57ECEE0F395D} - SharpMap.Utilities.Indexing.SbnTree - - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - - - {A4140C12-53F5-438C-8D24-9E48C504FECF} - SharpMap.Extensions - - - - - Designer - - - Designer - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - PreserveNewest - - - - - - - - - - - - - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - - - - - - + + + + Debug + AnyCPU + {0C76DD99-AC5D-47C0-B76F-CE70092A9AC7} + Library + Properties + UnitTests + UnitTests + + + 3.5 + + + v4.5.2 + + + ..\ + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + false + false + + + pdbonly + true + bin\ + TRACE + prompt + 4 + true + false + + + pdbonly + + bin\ + TRACE;LINUX + prompt + 4 + true + false + + + + + + ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll + True + + + ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll + True + + + ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll + True + + + ..\packages\GDAL.1.11.1\lib\net40\gdalconst_csharp.dll + True + + + ..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll + True + + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + + + ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll + True + + + ..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + ..\packages\NetTopologySuite.Features.1.15.0\lib\net40\NetTopologySuite.Features.dll + + + ..\packages\NetTopologySuite.IO.PostGis.1.15.0\lib\net40-client\NetTopologySuite.IO.PostGis.dll + + + ..\packages\Npgsql.2.2.7\lib\net40\Npgsql.dll + True + + + False + ..\packages\NUnit.2.6.3\lib\nunit.framework.dll + + + ..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll + True + + + ..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll + True + + + ..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll + + + + + ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net451\System.Data.SQLite.dll + + + + False + ..\packages\Rx-Core.2.2.4\lib\net40\System.Reactive.Core.dll + + + False + ..\packages\Rx-Interfaces.2.2.4\lib\net40\System.Reactive.Interfaces.dll + + + False + ..\packages\Rx-Linq.2.2.4\lib\net40\System.Reactive.Linq.dll + + + False + ..\packages\Rx-PlatformServices.2.2.4\lib\net40\System.Reactive.PlatformServices.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Properties\SharedAssemblyVersion.cs + + + + + {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} + SharpMap.SqlServerSpatialObjects + + + + + {AF0594AB-FC1D-47E4-8CDD-361CDC621A36} + SharpMap.Data.Providers.GeoPackage + + + {F9DA6934-413F-4744-84CE-923D901F60E6} + SharpMap.Data.Providers.Kml + + + {9BBED556-40D8-4DDC-AC11-7B03300E2A2E} + SharpMap.Data.Providers.OracleSpatial + + + {d84f31ed-3d81-42f2-9190-3d021d6038a0} + SharpMap.Layers.BruTile + + + {75E9B9FF-D04E-4F4F-8D06-8CD310F5F2DB} + SharpMap.Serialization + + + {723F9FD5-8424-4EEE-BA92-57ECEE0F395D} + SharpMap.Utilities.Indexing.SbnTree + + + {C83777FC-AABB-47D9-911F-D76255D4D541} + SharpMap + + + {A4140C12-53F5-438C-8D24-9E48C504FECF} + SharpMap.Extensions + + + + + Designer + + + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + PreserveNewest + + + + + + + + + + + + + Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + + + + + + \ No newline at end of file From bb0c657a715043a5559114672b60553fac011e2e Mon Sep 17 00:00:00 2001 From: Tim C Date: Mon, 24 Jun 2019 17:05:35 +0700 Subject: [PATCH 087/186] 1) update Map Decorations to use MapViewport 2) clean up MapTransform to use Elements and MapRotation 3) add Unit Test for ZoomToBox with MapTransform (for future update) 4) resolve Sqlite package version issue --- SharpMap/Map/Map.cs | 3292 +++++++++-------- SharpMap/Rendering/Decoration/Disclaimer.cs | 253 +- SharpMap/Rendering/Decoration/EyeOfSight.cs | 213 +- .../Rendering/Decoration/IMapDecoration.cs | 38 +- .../Rendering/Decoration/MapDecoration.cs | 50 +- SharpMap/Rendering/Decoration/NorthArrow.cs | 265 +- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 6 +- UnitTests/MapDecorationTest.cs | 168 +- UnitTests/MapTest.cs | 1972 +++++----- UnitTests/UnitTests.csproj | 11 +- UnitTests/packages.config | 52 +- 11 files changed, 3213 insertions(+), 3107 deletions(-) diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index 3bc9cd4d..02ee4a69 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -1,1639 +1,1653 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using GeoAPI.Geometries; -using NetTopologySuite; -using SharpMap.Layers; -using SharpMap.Rendering; -using SharpMap.Rendering.Decoration; -using SharpMap.Styles; -using SharpMap.Utilities; -using Point = GeoAPI.Geometries.Coordinate; -using System.Drawing.Imaging; -using Common.Logging; -using System.Reflection; - -namespace SharpMap -{ - /// - /// Map class, the main holder for a MapObject in SharpMap - /// - /// - /// Creating a new map instance, adding layers and rendering the map: - /// - [Serializable] - public class Map : IDisposable - { - /// - /// Method to invoke the static constructor of this class - /// - public static void Configure() - { - // Methods sole purpose is to get the static constructor executed - } - - /// - /// Static constructor. Needed to get set. - /// - static Map() - { - try - { - _logger.Debug("Trying to get GeoAPI.GeometryServiceProvider.Instance"); - var instance = GeoAPI.GeometryServiceProvider.Instance; - if (instance == null) - { - _logger.Debug("Returned null"); - throw new InvalidOperationException(); - } - } - catch (InvalidOperationException) - { - _logger.Debug("Loading NetTopologySuite"); - Assembly.Load("NetTopologySuite"); - _logger.Debug("Loaded NetTopologySuite"); - _logger.Debug("Trying to get GeoAPI.GeometryServiceProvider.Instance"); - var instance = GeoAPI.GeometryServiceProvider.Instance; - if (instance == null) - { - _logger.Debug("Returned null"); - throw new InvalidOperationException(); - } - } - - // The following code did not seem to work in all cases. - /* - if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime) - { - _logger.Debug("In design mode"); - Trace.WriteLine("In design mode"); - // We have to do this initialization with reflection due to the fact that NTS can reference an older version of GeoAPI and redirection - // is not available at design time.. - var ntsAssembly = Assembly.Load("NetTopologySuite"); - _logger.Debug("Loaded NetTopologySuite"); - Trace.WriteLine("Loaded NetTopologySuite"); - try - { - _logger.Debug("Trying to access GeoAPI.GeometryServiceProvider.Instance"); - Trace.WriteLine("Trying to access GeoAPI.GeometryServiceProvider.Instance"); - if (GeoAPI.GeometryServiceProvider.Instance == null) - { - _logger.Debug("Returned null, setting it to default"); - Trace.WriteLine("Returned null, setting it to default"); - var ntsApiGeometryServices = ntsAssembly.GetType("NetTopologySuite.NtsGeometryServices"); - GeoAPI.GeometryServiceProvider.Instance = - ntsApiGeometryServices.GetProperty("Instance").GetValue(null, null) as - GeoAPI.IGeometryServices; - } - } - - catch (InvalidOperationException) - { - _logger.Debug("InvalidOperationException thrown, setting it to default"); - Trace.WriteLine("InvalidOperationException thrown, setting it to default"); - var ntsApiGeometryServices = ntsAssembly.GetType("NetTopologySuite.NtsGeometryServices"); - GeoAPI.GeometryServiceProvider.Instance = - ntsApiGeometryServices.GetProperty("Instance").GetValue(null, null) as - GeoAPI.IGeometryServices; - } - _logger.Debug("Exiting design mode handling"); - Trace.WriteLine("Exiting design mode handling"); - } - */ - } - - static readonly ILog _logger = LogManager.GetLogger(typeof(Map)); - - /// - /// Used for converting numbers to/from strings - /// - public static NumberFormatInfo NumberFormatEnUs = new CultureInfo("en-US", false).NumberFormat; - - #region Fields - private readonly List _decorations = new List(); - - private Color _backgroundColor; - private int _srid = -1; - private double _zoom; - private Point _center; - private readonly LayerCollection _layers; - private readonly LayerCollection _backgroundLayers; - private readonly VariableLayerCollection _variableLayers; - private object _lockMapTransform = new object(); - private Matrix _mapTransform; - private Matrix _mapTransformInverted; - - private readonly MapViewPortGuard _mapViewportGuard; - private readonly Dictionary> _layersPerGroup = new Dictionary>(); - private ObservableCollection _replacingCollection; - private Guid _id = Guid.NewGuid(); - - #endregion - - - /// - /// Specifies whether to trigger a dispose on all layers (and their datasources) contained in this map when the map-object is disposed. - /// The default behaviour is true unless the map is a result of a Map.Clone() operation in which case the value is false - /// - /// If you reuse your datasources or layers between many map-objects you should set this property to false in order for them to keep existing after a map.dispose() - /// - public bool DisposeLayersOnDispose = true; - - /// - /// Initializes a new map - /// - public Map() : this(new Size(640, 480)) - { - - } - - /// - /// Initializes a new map - /// - /// Size of map in pixels - public Map(Size size) - { - _mapViewportGuard = new MapViewPortGuard(size, 0d, Double.MaxValue); - - if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) - { - Factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(_srid); - } - _layers = new LayerCollection(); - _layersPerGroup.Add(_layers, new List()); - _backgroundLayers = new LayerCollection(); - _layersPerGroup.Add(_backgroundLayers, new List()); - _variableLayers = new VariableLayerCollection(_layers); - _layersPerGroup.Add(_variableLayers, new List()); - BackColor = Color.Transparent; - _mapTransform = new Matrix(); - _mapTransformInverted = new Matrix(); - _center = new Point(0, 0); - _zoom = 1; - - WireEvents(); - - if (_logger.IsDebugEnabled) - _logger.DebugFormat("Map initialized with size {0},{1}", size.Width, size.Height); - } - - /// - /// Wires the events - /// - private void WireEvents() - { - _backgroundLayers.CollectionChanged += OnLayersCollectionChanged; - _layers.CollectionChanged += OnLayersCollectionChanged; - } - - /// - /// Event handler to intercept when a new ITileAsymclayer is added to the Layers List and associate the MapNewTile Handler Event - /// - private void OnLayersCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - if (e.Action == NotifyCollectionChangedAction.Reset) - { - var cloneList = _layersPerGroup[sender]; - IterUnHookEvents(sender, cloneList); - } - if (e.Action == NotifyCollectionChangedAction.Replace || e.Action == NotifyCollectionChangedAction.Remove) - { - IterUnHookEvents(sender, e.OldItems.Cast()); - } - if (e.Action == NotifyCollectionChangedAction.Replace || e.Action == NotifyCollectionChangedAction.Add) - { - IterWireEvents(sender, e.NewItems.Cast()); - } - - } - - private void IterWireEvents(object owner, IEnumerable layers) - { - foreach (var layer in layers) - { - _layersPerGroup[owner].Add(layer); - - var tileAsyncLayer = layer as ITileAsyncLayer; - if (tileAsyncLayer != null) - { - WireTileAsyncEvents(tileAsyncLayer); - } - - var group = layer as LayerGroup; - if (group != null) - { - group.LayersChanging += OnLayerGroupCollectionReplaching; - group.LayersChanged += OnLayerGroupCollectionReplached; - - var nestedList = group.Layers; - if (group.Layers != null) - { - group.Layers.CollectionChanged += OnLayersCollectionChanged; - _layersPerGroup.Add(nestedList, new List()); - } - else - { - _layersPerGroup.Add(nestedList, new List()); - } - - IterWireEvents(nestedList, nestedList); - } - } - } - - private void IterUnHookEvents(object owner, IEnumerable layers) - { - var toBeRemoved = new List(); - - foreach (var layer in layers) - { - toBeRemoved.Add(layer); - - var tileAsyncLayer = layer as ITileAsyncLayer; - if (tileAsyncLayer != null) - { - UnhookTileAsyncEvents(tileAsyncLayer); - } - - var group = layer as LayerGroup; - if (group != null) - { - group.LayersChanging -= OnLayerGroupCollectionReplaching; - group.LayersChanged -= OnLayerGroupCollectionReplached; - - var nestedList = group.Layers; - - if (nestedList != null) - { - nestedList.CollectionChanged -= OnLayersCollectionChanged; - - IterUnHookEvents(nestedList, nestedList); - - _layersPerGroup.Remove(nestedList); - } - } - } - - var clonedList = _layersPerGroup[owner]; - toBeRemoved.ForEach(layer => clonedList.Remove(layer)); - } - - private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) - { - var layerGroup = (LayerGroup)sender; - - var newCollection = layerGroup.Layers; - - IterUnHookEvents(_replacingCollection, _replacingCollection); - _layersPerGroup.Remove(_replacingCollection); - _replacingCollection.CollectionChanged -= OnLayersCollectionChanged; - - if (newCollection != null) - { - IterWireEvents(newCollection, newCollection); - - _layersPerGroup.Add(newCollection, new List(newCollection)); - - newCollection.CollectionChanged += OnLayersCollectionChanged; - } - } - - private void OnLayerGroupCollectionReplaching(object sender, EventArgs eventArgs) - { - var layerGroup = (LayerGroup)sender; - - _replacingCollection = layerGroup.Layers; - } - - private void layer_DownloadProgressChanged(int tilesRemaining) - { - if (tilesRemaining <= 0) - { - OnRefreshNeeded(EventArgs.Empty); - } - } - - private void WireTileAsyncEvents(ITileAsyncLayer tileAsyncLayer) - { - if (tileAsyncLayer.OnlyRedrawWhenComplete) - { - tileAsyncLayer.DownloadProgressChanged += layer_DownloadProgressChanged; - } - else - { - tileAsyncLayer.MapNewTileAvaliable += MapNewTileAvaliableHandler; - } - } - - private void UnhookTileAsyncEvents(ITileAsyncLayer tileAsyncLayer) - { - tileAsyncLayer.DownloadProgressChanged -= layer_DownloadProgressChanged; - tileAsyncLayer.MapNewTileAvaliable -= MapNewTileAvaliableHandler; - } - - - #region IDisposable Members - - /// - /// Disposes the map object - /// - public void Dispose() - { - if (DisposeLayersOnDispose) - { - if (Layers != null) - { - foreach (IDisposable disposable in Layers.OfType()) - { - disposable.Dispose(); - } - } - if (BackgroundLayer != null) - { - foreach (IDisposable disposable in BackgroundLayer.OfType()) - { - disposable.Dispose(); - } - } - if (VariableLayers != null) - { - foreach (IDisposable layer in VariableLayers.OfType()) - layer.Dispose(); - } - } - if (Layers != null) - { - Layers.Clear(); - } - if (BackgroundLayer != null) - { - BackgroundLayer.Clear(); - } - if (VariableLayers != null) - { - VariableLayers.Clear(); - } - - } - - #endregion - - #region Events - - #region Delegates - - /// - /// EventHandler for event fired when the maps layer list has been changed - /// - public delegate void LayersChangedEventHandler(); - - /// - /// EventHandler for event fired when all layers have been rendered - /// - public delegate void MapRenderedEventHandler(Graphics g); - - /// - /// EventHandler for event fired when all layers are about to be rendered - /// - public delegate void MapRenderingEventHandler(Graphics g); - - /// - /// EventHandler for event fired when the zoomlevel or the center point has been changed - /// - public delegate void MapViewChangedHandler(); - - - #endregion - - /// - /// Event fired when the maps layer list have been changed - /// - [Obsolete("This event is never invoked since it has been made impossible to change the LayerCollection for a map instance.")] -#pragma warning disable 67 - public event LayersChangedEventHandler LayersChanged; -#pragma warning restore 67 - - /// - /// Event fired when the zoomlevel or the center point has been changed - /// - public event MapViewChangedHandler MapViewOnChange; - - - /// - /// Event fired when all layers are about to be rendered - /// - public event MapRenderedEventHandler MapRendering; - - /// - /// Event fired when all layers have been rendered - /// - public event MapRenderedEventHandler MapRendered; - - /// - /// Event fired when one layer have been rendered - /// - public event EventHandler LayerRendering; - - /// - /// Event fired when one layer have been rendered - /// - public event EventHandler LayerRenderedEx; - - /// - /// Event fired when a layer has been rendered - /// - [Obsolete("Use LayerRenderedEx")] - public event EventHandler LayerRendered; - - /// - /// Event fired when a new Tile is available in a TileAsyncLayer - /// - public event MapNewTileAvaliabledHandler MapNewTileAvaliable; - - /// - /// Event that is called when a layer have changed and the map need to redraw - /// - public event EventHandler RefreshNeeded; - - #endregion - - #region Methods - - /// - /// Renders the map to an image - /// - /// the map image - public Image GetMap() - { - Image img = new Bitmap(Size.Width, Size.Height); - Graphics g = Graphics.FromImage(img); - RenderMap(g); - g.Dispose(); - return img; - } - - /// - /// Renders the map to an image with the supplied resolution - /// - /// The resolution of the image - /// The map image - public Image GetMap(int resolution) - { - Image img = new Bitmap(Size.Width, Size.Height); - ((Bitmap)img).SetResolution(resolution, resolution); - Graphics g = Graphics.FromImage(img); - RenderMap(g); - g.Dispose(); - return img; - - } - - /// - /// Renders the map to a Metafile (Vectorimage). - /// - /// - /// A Metafile can be saved as WMF,EMF etc. or put onto the clipboard for paste in other applications such av Word-processors which will give - /// a high quality vector image in that application. - /// - /// The current map rendered as to a Metafile - public Metafile GetMapAsMetafile() - { - return GetMapAsMetafile(String.Empty); - } - - /// - /// Renders the map to a Metafile (Vectorimage). - /// - /// The filename of the metafile. If this is null or empty the metafile is not saved. - /// - /// A Metafile can be saved as WMF,EMF etc. or put onto the clipboard for paste in other applications such av Word-processors which will give - /// a high quality vector image in that application. - /// - /// The current map rendered as to a Metafile - public Metafile GetMapAsMetafile(string metafileName) - { - Metafile metafile; - var bm = new Bitmap(1, 1); - using (var g = Graphics.FromImage(bm)) - { - var hdc = g.GetHdc(); - using (var stream = new MemoryStream()) - { - metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), - MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); - - using (var metafileGraphics = Graphics.FromImage(metafile)) - { - metafileGraphics.PageUnit = GraphicsUnit.Pixel; - metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, - new[] { new PointF(Size.Width, Size.Height) }); - - //Render map to metafile - RenderMap(metafileGraphics); - } - - //Save metafile if desired - if (!String.IsNullOrEmpty(metafileName)) - File.WriteAllBytes(metafileName, stream.ToArray()); - } - g.ReleaseHdc(hdc); - } - return metafile; - } - - //ToDo: fill in the blanks - /// - /// - /// - /// - /// - /// - /// - /// - public void MapNewTileAvaliableHandler(ITileAsyncLayer sender, Envelope bbox, Bitmap bm, int sourceWidth, int sourceHeight, ImageAttributes imageAttributes) - { - var e = MapNewTileAvaliable; - if (e != null) - e(sender, bbox, bm, sourceWidth, sourceHeight, imageAttributes); - } - - /// - /// Renders the map using the provided object. - /// - /// the object to use - /// if object is null. - /// if there are no layers to render. - public void RenderMap(Graphics g) - { - OnMapRendering(g); - - if (g == null) - throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); - - //Pauses the timer for VariableLayer - _variableLayers.Pause = true; - - if ((Layers == null || Layers.Count == 0) && (BackgroundLayer == null || BackgroundLayer.Count == 0) && (_variableLayers == null || _variableLayers.Count == 0)) - throw new InvalidOperationException("No layers to render"); - - MapViewport mvp = null; - lock (_lockMapTransform) - { - // working with MapTransform CLONE - g.Transform = MapTransform; - mvp = (MapViewport)this; - } - g.Clear(BackColor); - g.PageUnit = GraphicsUnit.Pixel; - - double zoom = mvp.Zoom; - double scale = double.NaN; //will be resolved if needed - - ILayer[] layerList; - if (_backgroundLayers != null && _backgroundLayers.Count > 0) - { - layerList = new ILayer[_backgroundLayers.Count]; - _backgroundLayers.CopyTo(layerList, 0); - foreach (ILayer layer in layerList) - { - if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) - { - scale = mvp.GetMapScale((int)g.DpiX); - } - double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; - - OnLayerRendering(layer, LayerCollectionType.Background); - if (layer.Enabled) - { - if (layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) - { - LayerCollectionRenderer.RenderLayer(layer, g, mvp); - } - } - OnLayerRendered(layer, LayerCollectionType.Background); - } - } - - if (_layers != null && _layers.Count > 0) - { - layerList = new ILayer[_layers.Count]; - _layers.CopyTo(layerList, 0); - - //int srid = (Layers.Count > 0 ? Layers[0].SRID : -1); //Get the SRID of the first layer - foreach (ILayer layer in layerList) - { - if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) - { - scale = mvp.GetMapScale((int)g.DpiX); - } - double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; - OnLayerRendering(layer, LayerCollectionType.Static); - if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) - LayerCollectionRenderer.RenderLayer(layer, g, mvp); - - OnLayerRendered(layer, LayerCollectionType.Static); - } - } - - if (_variableLayers != null && _variableLayers.Count > 0) - { - layerList = new ILayer[_variableLayers.Count]; - _variableLayers.CopyTo(layerList, 0); - foreach (ILayer layer in layerList) - { - if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) - { - scale = mvp.GetMapScale((int)g.DpiX); - } - double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; - if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) - LayerCollectionRenderer.RenderLayer(layer, g, mvp); - - } - } - -#pragma warning disable 612,618 - RenderDisclaimer(g); -#pragma warning restore 612,618 - - // Render all map decorations - foreach (var mapDecoration in _decorations) - { - mapDecoration.Render(g, this); - } - //Resets the timer for VariableLayer - _variableLayers.Pause = false; - - OnMapRendered(g); - } - - /// - /// Fires the RefreshNeeded event. - /// - /// EventArgs argument. - protected virtual void OnRefreshNeeded(EventArgs e) - { - var handler = RefreshNeeded; - if (handler != null) - handler(this, e); - } - - /// - /// Fired when map is rendering - /// - /// - protected virtual void OnMapRendering(Graphics g) - { - var e = MapRendering; - if (e != null) e(g); - } - - /// - /// Fired when Map is rendered - /// - /// - protected virtual void OnMapRendered(Graphics g) - { - var e = MapRendered; - if (e != null) e(g); //Fire render event - } - - /// - /// Method called when starting to render of . This fires the - /// event. - /// - /// The layer to render - /// The collection type - protected virtual void OnLayerRendering(ILayer layer, LayerCollectionType layerCollectionType) - { - var e = LayerRendering; - if (e != null) e(this, new LayerRenderingEventArgs(layer, layerCollectionType)); - } - -#pragma warning disable 612,618 - /// - /// Method called when of has been rendered. This fires the - /// and event. - /// - /// The layer to render - /// The collection type - protected virtual void OnLayerRendered(ILayer layer, LayerCollectionType layerCollectionType) - { - var e = LayerRendered; -#pragma warning restore 612,618 - if (e != null) - { - e(this, EventArgs.Empty); - } - - var eex = LayerRenderedEx; - if (eex != null) - { - eex(this, new LayerRenderingEventArgs(layer, layerCollectionType)); - } - } - - - /// - /// Renders the map using the provided object. - /// - /// the object to use - /// the to use - /// if object is null. - /// if there are no layers to render. - public void RenderMap(Graphics g, LayerCollectionType layerCollectionType) - { - RenderMap(g, layerCollectionType, true, false); - } - - /// - /// Renders the map using the provided object. - /// - /// the object to use - /// the to use - /// Set whether to draw map decorations on the map (if such are set) - /// Set wether to draw with transparent background or with BackColor as background - /// if object is null. - /// if there are no layers to render. - public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool drawMapDecorations, bool drawTransparent) - { - if (g == null) - throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); - - _variableLayers.Pause = true; - - LayerCollection lc = null; - switch (layerCollectionType) - { - case LayerCollectionType.Static: - lc = Layers; - break; - case LayerCollectionType.Variable: - lc = VariableLayers; - break; - case LayerCollectionType.Background: - lc = BackgroundLayer; - break; - } - - if (lc == null || lc.Count == 0) - throw new InvalidOperationException("No layers to render"); - - Matrix transform = g.Transform; - MapViewport mvp = null; - lock (_lockMapTransform) - { - // working with MapTransform CLONE - g.Transform = MapTransform; - mvp = (MapViewport)this; - } - if (!drawTransparent) - g.Clear(BackColor); - - g.PageUnit = GraphicsUnit.Pixel; - - //LayerCollectionRenderer.AllowParallel = layerCollectionType == LayerCollectionType.Static; - using (var lcr = new LayerCollectionRenderer(lc)) - { - lcr.Render(g, mvp, layerCollectionType == LayerCollectionType.Static); - } - - /* - var layerList = new ILayer[lc.Count]; - lc.CopyTo(layerList, 0); - - foreach (ILayer layer in layerList) - { - if (layer.Enabled && layer.MaxVisible >= Zoom && layer.MinVisible < Zoom) - layer.Render(g, this); - } - - */ - - if (drawTransparent) - g.Transform = transform; - - if (layerCollectionType == LayerCollectionType.Static) - { -#pragma warning disable 612,618 - RenderDisclaimer(g); -#pragma warning restore 612,618 - if (drawMapDecorations) - { - foreach (var mapDecoration in Decorations) - { - mapDecoration.Render(g, this); - } - } - } - - - - _variableLayers.Pause = false; - - } - - /// - /// Returns a cloned copy of this map-object. - /// Layers are not cloned. The same instances are referenced from the cloned copy as from the original. - /// The property is however false on this object (which prevents layers beeing disposed and then not usable from the original map) - /// - /// Instance of - public Map Clone() - { - Map clone; - lock (_lockMapTransform) - { - clone = new Map - { - BackColor = BackColor, -#pragma warning disable 612,618 - Disclaimer = Disclaimer, - DisclaimerLocation = DisclaimerLocation, -#pragma warning restore 612,618 - MaximumZoom = MaximumZoom, - MinimumZoom = MinimumZoom, - MaximumExtents = MaximumExtents, - EnforceMaximumExtents = EnforceMaximumExtents, - PixelAspectRatio = PixelAspectRatio, - Zoom = Zoom, - DisposeLayersOnDispose = false, - SRID = SRID, - _id = ID - }; - -#pragma warning disable 612,618 - if (DisclaimerFont != null) - clone.DisclaimerFont = (Font)DisclaimerFont.Clone(); -#pragma warning restore 612,618 - if (MapTransform != null) - clone.MapTransform = MapTransform; - if (!Size.IsEmpty) - clone.Size = new Size(Size.Width, Size.Height); - if (Center != null) - clone.Center = Center.Copy(); - - } - - if (BackgroundLayer != null) - clone.BackgroundLayer.AddCollection(BackgroundLayer.Clone()); - - for (int i = 0; i < Decorations.Count; i++) - clone.Decorations.Add(Decorations[i]); - - if (Layers != null) - clone.Layers.AddCollection(Layers.Clone()); - - if (VariableLayers != null) - clone.VariableLayers.AddCollection(VariableLayers.Clone()); - - return clone; - } - - [Obsolete] - private void RenderDisclaimer(Graphics g) - { - //Disclaimer - if (!String.IsNullOrEmpty(_disclaimer)) - { - var size = VectorRenderer.SizeOfString(g, _disclaimer, _disclaimerFont); - size.Width = (Single)Math.Ceiling(size.Width); - size.Height = (Single)Math.Ceiling(size.Height); - StringFormat sf; - switch (DisclaimerLocation) - { - case 0: //Right-Bottom - sf = new StringFormat(); - sf.Alignment = StringAlignment.Far; - g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, - g.VisibleClipBounds.Width, - g.VisibleClipBounds.Height - size.Height - 2, sf); - break; - case 1: //Right-Top - sf = new StringFormat(); - sf.Alignment = StringAlignment.Far; - g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, - g.VisibleClipBounds.Width, 0f, sf); - break; - case 2: //Left-Top - g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, 0f, 0f); - break; - case 3://Left-Bottom - g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, 0f, - g.VisibleClipBounds.Height - size.Height - 2); - break; - } - } - } - - /// - /// Returns an enumerable for all layers containing the search parameter in the LayerName property - /// - /// Search parameter - /// IEnumerable - public IEnumerable FindLayer(string layername) - { - return Layers.Where(l => l.LayerName.Contains(layername)); - } - - /// - /// Returns a layer by its name - /// - /// Name of layer - /// Layer - public ILayer GetLayerByName(string name) - { - ILayer lay = null; - if (Layers != null) - { - lay = Layers.GetLayerByName(name); - } - if (lay == null && BackgroundLayer != null) - { - lay = BackgroundLayer.GetLayerByName(name); - } - if (lay == null && VariableLayers != null) - { - lay = VariableLayers.GetLayerByName(name); - } - - return lay; - } - - /// - /// Zooms to the extents of all layers - /// - public void ZoomToExtents() - { - ZoomToBox(GetExtents()); - } - - /// - /// Zooms the map to fit a bounding box - /// - /// - /// NOTE: If the aspect ratio of the box and the aspect ratio of the mapsize - /// isn't the same, the resulting map-envelope will be adjusted so that it contains - /// the bounding box, thus making the resulting envelope larger! - /// - /// - public void ZoomToBox(Envelope bbox) - { - if (bbox != null && !bbox.IsNull) - { - //Ensure aspect ratio - var resX = Size.Width == 0 ? double.MaxValue : bbox.Width / Size.Width; - var resY = Size.Height == 0 ? double.MaxValue : bbox.Height / Size.Height; - var zoom = bbox.Width; - if (resY > resX && resX > 0) - { - zoom *= resY / resX; - } - - var center = new Coordinate(bbox.Centre); - - zoom = _mapViewportGuard.VerifyZoom(zoom, center); - var changed = false; - if (zoom != _zoom) - { - _zoom = zoom; - changed = true; - } - - if (!center.Equals2D(_center)) - { - _center = center; - changed = true; - } - - if (changed && MapViewOnChange != null) - MapViewOnChange(); - } - } - - /// - /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. - /// - /// Point in world coordinates - /// Indicates whether MapTransform should be taken into account - /// Point in image coordinates - public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) - { - var pTmp = Transform.WorldtoMap(p, this); - if (!careAboutMapTransform) - return pTmp; - - if (!MapTransformRotation.Equals(0f)) - { - // working with MapTransform clone - using (var transform = MapTransform) - { - if (!transform.IsIdentity) - { - var pts = new[] {pTmp}; - transform.TransformPoints(pts); - pTmp = pts[0]; - } - } - } - - return pTmp; - } - - /// - /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. - /// - /// Point in world coordinates - /// Point in image coordinates - public PointF WorldToImage(Point p) - { - return WorldToImage(p, false); - } - - /// - /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. - /// - /// Point in image coordinates - /// Point in world coordinates - public Point ImageToWorld(PointF p) - { - return ImageToWorld(p, false); - } - /// - /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. - /// - /// Point in image coordinates - /// Indicates whether MapTransform should be taken into account - /// Point in world coordinates - public Point ImageToWorld(PointF p, bool careAboutMapTransform) - { - if (careAboutMapTransform && MapTransformRotation != 0) - { - Matrix transformInv; - lock (_lockMapTransform) - transformInv = _mapTransformInverted.Clone(); - - if (!transformInv.IsIdentity) - { - var pts = new[] { p }; - transformInv.TransformPoints(pts); - p = pts[0]; - } - transformInv.Dispose(); - } - - return Transform.MapToWorld(p, this); - } - - #endregion - - #region Properties - - /// - /// Gets or sets the unique identifier of the map. - /// - public Guid ID - { - get { return _id; } - set { _id = value; } - } - - /// - /// Gets or sets the SRID of the map - /// - public int SRID - { - get { return _srid; } - set - { - if (_srid == value) - return; - _srid = value; - Factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(_srid); - } - } - - /// - /// Factory used to create geometries - /// - public IGeometryFactory Factory { get; private set; } - - /// - /// List of all map decorations - /// - public IList Decorations - { - get { return _decorations; } - } - - /// - /// Gets the extents of the current map based on the current zoom, center and mapsize - /// - public Envelope Envelope - { - get - { - if (double.IsNaN(MapHeight) || double.IsInfinity(MapHeight)) - return new Envelope(0, 0, 0, 0); - - var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); - var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); - - if (MapTransformRotation.Equals(0f)) - return new Envelope(ll, ur); - else - { - var pts = new[] { new PointF((float)ll.X, (float)ll.Y), - new PointF((float)ll.X, (float)ur.Y), - new PointF((float)ur.X, (float)ur.Y), - new PointF((float)ur.X, (float)ll.Y)}; - - Matrix matrix = new Matrix(); - matrix.RotateAt(-MapTransformRotation, new PointF((float)Center.X, (float)Center.Y)); - matrix.TransformPoints(pts); - - return new Envelope(Math.Min(Math.Min(Math.Min(pts[0].X, pts[1].X), pts[2].X), pts[3].X), - Math.Max(Math.Max(Math.Max(pts[0].X, pts[1].X), pts[2].X), pts[3].X), - Math.Min(Math.Min(Math.Min(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y), - Math.Max(Math.Max(Math.Max(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y)); - } - - } - } - - /// - /// Getter returns a CLONE. Using the you can alter the coordinate system of the map rendering. - /// This makes it possible to rotate or rescale the image, for instance to have another direction than north upwards. - /// - /// - /// Rotate the map output 45 degrees around its center: - /// - /// System.Drawing.Drawing2D.Matrix maptransform = new System.Drawing.Drawing2D.Matrix(); //Create transformation matrix - /// maptransform.RotateAt(45,new PointF(myMap.Size.Width/2,myMap.Size.Height/2)); //Apply 45 degrees rotation around the center of the map - /// myMap.MapTransform = maptransform; //Apply transformation to map - /// - /// - public Matrix MapTransform - { - get - { - lock (_lockMapTransform) - return _mapTransform.Clone(); - } - set - { - if (value == null) - value = new Matrix(); - - if (!value.IsInvertible) - throw new ArgumentException("Matrix not invertible", nameof(value)); - - _mapTransform = value; - _mapTransformInverted = value.Clone(); - _mapTransformInverted.Invert(); - - if (value.IsIdentity) - MapTransformRotation = 0; - else - { - var rad = value.Elements[1] >= 0 ? Math.Acos(value.Elements[0]) : -Math.Acos(value.Elements[0]); - if (rad < 0) - rad += 2 * Math.PI; - MapTransformRotation = (float)(rad * 180.0 / Math.PI); - } - - } - } - - internal Matrix MapTransformInverted - { - get { return _mapTransformInverted; } - } - - /// - /// MapTransform Rotation in degrees. Facilitates determining if map is rotated without locking MapTransform. - /// - public float MapTransformRotation { get; private set; } - - /// - /// A collection of layers. The first layer in the list is drawn first, the last one on top. - /// - public LayerCollection Layers - { - get { return _layers; } - } - - /// - /// Collection of background Layers - /// - public LayerCollection BackgroundLayer - { - get { return _backgroundLayers; } - } - - /// - /// A collection of layers. The first layer in the list is drawn first, the last one on top. - /// - public VariableLayerCollection VariableLayers - { - get { return _variableLayers; } - } - - /// - /// Map background color (defaults to transparent) - /// - public Color BackColor - { - get { return _backgroundColor; } - set - { - _backgroundColor = value; - if (MapViewOnChange != null) - MapViewOnChange(); - } - } - - /// - /// Center of map in WCS - /// - public Point Center - { - get { return _center; } - set - { - if (value == null) - throw new ArgumentNullException("value"); - - var newZoom = _zoom; - var newCenter = new Coordinate(value); - - newZoom = _mapViewportGuard.VerifyZoom(newZoom, newCenter); - - var changed = false; - if (newZoom != _zoom) - { - _zoom = newZoom; - changed = true; - } - - if (!newCenter.Equals2D(_center)) - { - _center = newCenter; - changed = true; - } - - if (changed && MapViewOnChange != null) - MapViewOnChange(); - } - } - - private static int? _dpiX; - - /// - /// Gets or Sets the Scale of the map (related to current DPI-settings of rendering) - /// - public double MapScale - { - get - { - if (!_dpiX.HasValue) - { - using (var g = Graphics.FromHwnd(IntPtr.Zero)) - { - _dpiX = (int)g.DpiX; - } - } - - return GetMapScale(_dpiX.Value); - } - set - { - if (!_dpiX.HasValue) - { - using (var g = Graphics.FromHwnd(IntPtr.Zero)) - { - _dpiX = (int)g.DpiX; - } - } - Zoom = GetMapZoomFromScale(value, _dpiX.Value); - - } - } - - /// - /// Calculated the Zoom value for a given Scale-value - /// - /// - /// - /// - public double GetMapZoomFromScale(double scale, int dpi) - { - return ScaleCalculations.GetMapZoomFromScaleNonLatLong(scale, 1, dpi, Size.Width); - } - - /// - /// Returns the mapscale if the map was to be rendered with the specified DPI-settings - /// - /// - /// - public double GetMapScale(int dpi) - { - return ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); - } - - /// - /// Gets or sets the zoom level of map. - /// - /// - /// The zoom level corresponds to the width of the map in WCS units. - /// A zoomlevel of 0 will result in an empty map being rendered, but will not throw an exception - /// - public double Zoom - { - get { return _zoom; } - set - { - var newCenter = new Coordinate(_center); - value = _mapViewportGuard.VerifyZoom(value, newCenter); - - if (value.Equals(_zoom)) - return; - - _zoom = value; - if (!newCenter.Equals2D(_center)) - _center = newCenter; - - if (MapViewOnChange != null) - MapViewOnChange(); - } - } - - /// - /// Get Returns the size of a pixel in world coordinate units - /// - public double PixelSize - { - get { return Zoom / Size.Width; } - } - - /// - /// Returns the width of a pixel in world coordinate units. - /// - /// The value returned is the same as . - public double PixelWidth - { - get { return PixelSize; } - } - - /// - /// Returns the height of a pixel in world coordinate units. - /// - /// The value returned is the same as unless is different from 1. - public double PixelHeight - { - get { return PixelSize * _mapViewportGuard.PixelAspectRatio; } - } - - /// - /// Gets or sets the aspect-ratio of the pixel scales. A value less than - /// 1 will make the map stretch upwards, and larger than 1 will make it smaller. - /// - /// Throws an argument exception when value is 0 or less. - public double PixelAspectRatio - { - get { return _mapViewportGuard.PixelAspectRatio; } - set - { - _mapViewportGuard.PixelAspectRatio = value; - } - } - - /// - /// Height of map in world units - /// - /// - public double MapHeight - { - get { return (Zoom * Size.Height) / Size.Width * PixelAspectRatio; } - } - - /// - /// Size of output map - /// - public Size Size - { - get { return _mapViewportGuard.Size; } - set { _mapViewportGuard.Size = value; } - } - - /// - /// Minimum zoom amount allowed - /// - public double MinimumZoom - { - get { return _mapViewportGuard.MinimumZoom; } - set - { - _mapViewportGuard.MinimumZoom = value; - } - } - - /// - /// Maximum zoom amount allowed - /// - public double MaximumZoom - { - get { return _mapViewportGuard.MaximumZoom; } - set - { - _mapViewportGuard.MaximumZoom = value; - } - } - - /// - /// Gets the extents of the map based on the extents of all the layers in the layers collection - /// - /// Full map extents - public Envelope GetExtents() - { - if (!_mapViewportGuard.MaximumExtents.IsNull) - return MaximumExtents; - - if ((Layers == null || Layers.Count == 0) && - (VariableLayers == null || VariableLayers.Count == 0) && - (BackgroundLayer == null || BackgroundLayer.Count == 0)) - throw (new InvalidOperationException("No layers to zoom to")); - - Envelope bbox = null; - - ExtendBoxForCollection(Layers, ref bbox); - ExtendBoxForCollection(VariableLayers, ref bbox); - ExtendBoxForCollection(BackgroundLayer, ref bbox); - - return bbox; - } - - /// - /// Gets or sets a value indicating the maximum visible extent - /// - public Envelope MaximumExtents - { - get { return _mapViewportGuard.MaximumExtents; } - set { _mapViewportGuard.MaximumExtents = value; } - } - - /// - /// Gets or sets a value indicating if should be enforced or not. - /// - public bool EnforceMaximumExtents - { - get { return _mapViewportGuard.EnforceMaximumExtents; } - set { _mapViewportGuard.EnforceMaximumExtents = value; } - } - - private static void ExtendBoxForCollection(IEnumerable layersCollection, ref Envelope bbox) - { - foreach (var l in layersCollection) - { - - //Tries to get bb. Fails on some specific shapes and Mercator projects (World.shp) - Envelope bb; - try - { - bb = l.Envelope; - } - catch (Exception) - { - bb = new Envelope(new Coordinate(-20037508.342789, -20037508.342789), new Coordinate(20037508.342789, 20037508.342789)); - } - - if (bbox == null) - bbox = bb; - else - { - //FB: bb can be null on empty layers (e.g. temporary working layers with no data objects) - if (bb != null) - bbox.ExpandToInclude(bb); - } - - } - } - - #endregion - - #region Disclaimer - - private String _disclaimer; - /// - /// Copyright notice to be placed on the map - /// - [Obsolete("Use Disclaimer as MapDecoration instead!")] - public String Disclaimer - { - get { return _disclaimer; } - set - { - //only set disclaimer if not already done - if (String.IsNullOrEmpty(_disclaimer)) - { - _disclaimer = value; - //Ensure that Font for disclaimer is set - if (_disclaimerFont == null) - _disclaimerFont = new Font(FontFamily.GenericSansSerif, 8f); - } - } - } - - private Font _disclaimerFont; - /// - /// Font to use for the Disclaimer - /// - [Obsolete("Use Disclaimer as MapDecoration instead!")] - public Font DisclaimerFont - { - get { return _disclaimerFont; } - set - { - if (value == null) return; - _disclaimerFont = value; - } - } - - private Int32 _disclaimerLocation; - - /// - /// Location for the disclaimer - /// 2|1 - /// -+- - /// 3|0 - /// - [Obsolete("Use Disclaimer as MapDecoration instead!")] - public Int32 DisclaimerLocation - { - get { return _disclaimerLocation; } - set { _disclaimerLocation = value % 4; } - } - - - #endregion - } - - /// - /// Layer rendering event arguments class - /// - public class LayerRenderingEventArgs : EventArgs - { - /// - /// The layer that is being or has been rendered - /// - public readonly ILayer Layer; - - /// - /// The layer collection type the layer belongs to. - /// - public readonly LayerCollectionType LayerCollectionType; - - /// - /// Creates an instance of this class - /// - /// The layer that is being or has been rendered - /// The layer collection type the layer belongs to. - public LayerRenderingEventArgs(ILayer layer, LayerCollectionType layerCollectionType) - { - Layer = layer; - LayerCollectionType = layerCollectionType; - } - } - -} +// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using GeoAPI.Geometries; +using NetTopologySuite; +using SharpMap.Layers; +using SharpMap.Rendering; +using SharpMap.Rendering.Decoration; +using SharpMap.Styles; +using SharpMap.Utilities; +using Point = GeoAPI.Geometries.Coordinate; +using System.Drawing.Imaging; +using Common.Logging; +using System.Reflection; + +namespace SharpMap +{ + /// + /// Map class, the main holder for a MapObject in SharpMap + /// + /// + /// Creating a new map instance, adding layers and rendering the map: + /// + [Serializable] + public class Map : IDisposable + { + /// + /// Method to invoke the static constructor of this class + /// + public static void Configure() + { + // Methods sole purpose is to get the static constructor executed + } + + /// + /// Static constructor. Needed to get set. + /// + static Map() + { + try + { + _logger.Debug("Trying to get GeoAPI.GeometryServiceProvider.Instance"); + var instance = GeoAPI.GeometryServiceProvider.Instance; + if (instance == null) + { + _logger.Debug("Returned null"); + throw new InvalidOperationException(); + } + } + catch (InvalidOperationException) + { + _logger.Debug("Loading NetTopologySuite"); + Assembly.Load("NetTopologySuite"); + _logger.Debug("Loaded NetTopologySuite"); + _logger.Debug("Trying to get GeoAPI.GeometryServiceProvider.Instance"); + var instance = GeoAPI.GeometryServiceProvider.Instance; + if (instance == null) + { + _logger.Debug("Returned null"); + throw new InvalidOperationException(); + } + } + + // The following code did not seem to work in all cases. + /* + if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime) + { + _logger.Debug("In design mode"); + Trace.WriteLine("In design mode"); + // We have to do this initialization with reflection due to the fact that NTS can reference an older version of GeoAPI and redirection + // is not available at design time.. + var ntsAssembly = Assembly.Load("NetTopologySuite"); + _logger.Debug("Loaded NetTopologySuite"); + Trace.WriteLine("Loaded NetTopologySuite"); + try + { + _logger.Debug("Trying to access GeoAPI.GeometryServiceProvider.Instance"); + Trace.WriteLine("Trying to access GeoAPI.GeometryServiceProvider.Instance"); + if (GeoAPI.GeometryServiceProvider.Instance == null) + { + _logger.Debug("Returned null, setting it to default"); + Trace.WriteLine("Returned null, setting it to default"); + var ntsApiGeometryServices = ntsAssembly.GetType("NetTopologySuite.NtsGeometryServices"); + GeoAPI.GeometryServiceProvider.Instance = + ntsApiGeometryServices.GetProperty("Instance").GetValue(null, null) as + GeoAPI.IGeometryServices; + } + } + + catch (InvalidOperationException) + { + _logger.Debug("InvalidOperationException thrown, setting it to default"); + Trace.WriteLine("InvalidOperationException thrown, setting it to default"); + var ntsApiGeometryServices = ntsAssembly.GetType("NetTopologySuite.NtsGeometryServices"); + GeoAPI.GeometryServiceProvider.Instance = + ntsApiGeometryServices.GetProperty("Instance").GetValue(null, null) as + GeoAPI.IGeometryServices; + } + _logger.Debug("Exiting design mode handling"); + Trace.WriteLine("Exiting design mode handling"); + } + */ + } + + static readonly ILog _logger = LogManager.GetLogger(typeof(Map)); + + /// + /// Used for converting numbers to/from strings + /// + public static NumberFormatInfo NumberFormatEnUs = new CultureInfo("en-US", false).NumberFormat; + + #region Fields + private readonly List _decorations = new List(); + + private Color _backgroundColor; + private int _srid = -1; + private double _zoom; + private Point _center; + private readonly LayerCollection _layers; + private readonly LayerCollection _backgroundLayers; + private readonly VariableLayerCollection _variableLayers; +#pragma warning disable 169 + // both fields redundant, but unable to remove without violating serialization + private Matrix _mapTransform; + private Matrix _mapTransformInverted; +#pragma warning restore 169 + private readonly object _lockMapTransform = new object(); + private readonly object _lockMapTransformInverted = new object(); + private float[] _mapTransformElements; + private float[] _mapTransformInvertedElements; + + private readonly MapViewPortGuard _mapViewportGuard; + private readonly Dictionary> _layersPerGroup = new Dictionary>(); + private ObservableCollection _replacingCollection; + private Guid _id = Guid.NewGuid(); + + #endregion + + + /// + /// Specifies whether to trigger a dispose on all layers (and their datasources) contained in this map when the map-object is disposed. + /// The default behaviour is true unless the map is a result of a Map.Clone() operation in which case the value is false + /// + /// If you reuse your datasources or layers between many map-objects you should set this property to false in order for them to keep existing after a map.dispose() + /// + public bool DisposeLayersOnDispose = true; + + /// + /// Initializes a new map + /// + public Map() : this(new Size(640, 480)) + { + + } + + /// + /// Initializes a new map + /// + /// Size of map in pixels + public Map(Size size) + { + _mapViewportGuard = new MapViewPortGuard(size, 0d, Double.MaxValue); + + if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) + { + Factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(_srid); + } + _layers = new LayerCollection(); + _layersPerGroup.Add(_layers, new List()); + _backgroundLayers = new LayerCollection(); + _layersPerGroup.Add(_backgroundLayers, new List()); + _variableLayers = new VariableLayerCollection(_layers); + _layersPerGroup.Add(_variableLayers, new List()); + BackColor = Color.Transparent; + var matrix = new Matrix(); + _mapTransformElements = matrix.Elements; + _mapTransformInvertedElements = matrix.Elements; + _center = new Point(0, 0); + _zoom = 1; + + WireEvents(); + + if (_logger.IsDebugEnabled) + _logger.DebugFormat("Map initialized with size {0},{1}", size.Width, size.Height); + } + + /// + /// Wires the events + /// + private void WireEvents() + { + _backgroundLayers.CollectionChanged += OnLayersCollectionChanged; + _layers.CollectionChanged += OnLayersCollectionChanged; + } + + /// + /// Event handler to intercept when a new ITileAsymclayer is added to the Layers List and associate the MapNewTile Handler Event + /// + private void OnLayersCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + if (e.Action == NotifyCollectionChangedAction.Reset) + { + var cloneList = _layersPerGroup[sender]; + IterUnHookEvents(sender, cloneList); + } + if (e.Action == NotifyCollectionChangedAction.Replace || e.Action == NotifyCollectionChangedAction.Remove) + { + IterUnHookEvents(sender, e.OldItems.Cast()); + } + if (e.Action == NotifyCollectionChangedAction.Replace || e.Action == NotifyCollectionChangedAction.Add) + { + IterWireEvents(sender, e.NewItems.Cast()); + } + + } + + private void IterWireEvents(object owner, IEnumerable layers) + { + foreach (var layer in layers) + { + _layersPerGroup[owner].Add(layer); + + var tileAsyncLayer = layer as ITileAsyncLayer; + if (tileAsyncLayer != null) + { + WireTileAsyncEvents(tileAsyncLayer); + } + + var group = layer as LayerGroup; + if (group != null) + { + group.LayersChanging += OnLayerGroupCollectionReplaching; + group.LayersChanged += OnLayerGroupCollectionReplached; + + var nestedList = group.Layers; + if (group.Layers != null) + { + group.Layers.CollectionChanged += OnLayersCollectionChanged; + _layersPerGroup.Add(nestedList, new List()); + } + else + { + _layersPerGroup.Add(nestedList, new List()); + } + + IterWireEvents(nestedList, nestedList); + } + } + } + + private void IterUnHookEvents(object owner, IEnumerable layers) + { + var toBeRemoved = new List(); + + foreach (var layer in layers) + { + toBeRemoved.Add(layer); + + var tileAsyncLayer = layer as ITileAsyncLayer; + if (tileAsyncLayer != null) + { + UnhookTileAsyncEvents(tileAsyncLayer); + } + + var group = layer as LayerGroup; + if (group != null) + { + group.LayersChanging -= OnLayerGroupCollectionReplaching; + group.LayersChanged -= OnLayerGroupCollectionReplached; + + var nestedList = group.Layers; + + if (nestedList != null) + { + nestedList.CollectionChanged -= OnLayersCollectionChanged; + + IterUnHookEvents(nestedList, nestedList); + + _layersPerGroup.Remove(nestedList); + } + } + } + + var clonedList = _layersPerGroup[owner]; + toBeRemoved.ForEach(layer => clonedList.Remove(layer)); + } + + private void OnLayerGroupCollectionReplached(object sender, EventArgs eventArgs) + { + var layerGroup = (LayerGroup)sender; + + var newCollection = layerGroup.Layers; + + IterUnHookEvents(_replacingCollection, _replacingCollection); + _layersPerGroup.Remove(_replacingCollection); + _replacingCollection.CollectionChanged -= OnLayersCollectionChanged; + + if (newCollection != null) + { + IterWireEvents(newCollection, newCollection); + + _layersPerGroup.Add(newCollection, new List(newCollection)); + + newCollection.CollectionChanged += OnLayersCollectionChanged; + } + } + + private void OnLayerGroupCollectionReplaching(object sender, EventArgs eventArgs) + { + var layerGroup = (LayerGroup)sender; + + _replacingCollection = layerGroup.Layers; + } + + private void layer_DownloadProgressChanged(int tilesRemaining) + { + if (tilesRemaining <= 0) + { + OnRefreshNeeded(EventArgs.Empty); + } + } + + private void WireTileAsyncEvents(ITileAsyncLayer tileAsyncLayer) + { + if (tileAsyncLayer.OnlyRedrawWhenComplete) + { + tileAsyncLayer.DownloadProgressChanged += layer_DownloadProgressChanged; + } + else + { + tileAsyncLayer.MapNewTileAvaliable += MapNewTileAvaliableHandler; + } + } + + private void UnhookTileAsyncEvents(ITileAsyncLayer tileAsyncLayer) + { + tileAsyncLayer.DownloadProgressChanged -= layer_DownloadProgressChanged; + tileAsyncLayer.MapNewTileAvaliable -= MapNewTileAvaliableHandler; + } + + + #region IDisposable Members + + /// + /// Disposes the map object + /// + public void Dispose() + { + if (DisposeLayersOnDispose) + { + if (Layers != null) + { + foreach (IDisposable disposable in Layers.OfType()) + { + disposable.Dispose(); + } + } + if (BackgroundLayer != null) + { + foreach (IDisposable disposable in BackgroundLayer.OfType()) + { + disposable.Dispose(); + } + } + if (VariableLayers != null) + { + foreach (IDisposable layer in VariableLayers.OfType()) + layer.Dispose(); + } + } + if (Layers != null) + { + Layers.Clear(); + } + if (BackgroundLayer != null) + { + BackgroundLayer.Clear(); + } + if (VariableLayers != null) + { + VariableLayers.Clear(); + } + + } + + #endregion + + #region Events + + #region Delegates + + /// + /// EventHandler for event fired when the maps layer list has been changed + /// + public delegate void LayersChangedEventHandler(); + + /// + /// EventHandler for event fired when all layers have been rendered + /// + public delegate void MapRenderedEventHandler(Graphics g); + + /// + /// EventHandler for event fired when all layers are about to be rendered + /// + public delegate void MapRenderingEventHandler(Graphics g); + + /// + /// EventHandler for event fired when the zoomlevel or the center point has been changed + /// + public delegate void MapViewChangedHandler(); + + + #endregion + + /// + /// Event fired when the maps layer list have been changed + /// + [Obsolete("This event is never invoked since it has been made impossible to change the LayerCollection for a map instance.")] +#pragma warning disable 67 + public event LayersChangedEventHandler LayersChanged; +#pragma warning restore 67 + + /// + /// Event fired when the zoomlevel or the center point has been changed + /// + public event MapViewChangedHandler MapViewOnChange; + + + /// + /// Event fired when all layers are about to be rendered + /// + public event MapRenderedEventHandler MapRendering; + + /// + /// Event fired when all layers have been rendered + /// + public event MapRenderedEventHandler MapRendered; + + /// + /// Event fired when one layer have been rendered + /// + public event EventHandler LayerRendering; + + /// + /// Event fired when one layer have been rendered + /// + public event EventHandler LayerRenderedEx; + + /// + /// Event fired when a layer has been rendered + /// + [Obsolete("Use LayerRenderedEx")] + public event EventHandler LayerRendered; + + /// + /// Event fired when a new Tile is available in a TileAsyncLayer + /// + public event MapNewTileAvaliabledHandler MapNewTileAvaliable; + + /// + /// Event that is called when a layer have changed and the map need to redraw + /// + public event EventHandler RefreshNeeded; + + #endregion + + #region Methods + + /// + /// Renders the map to an image + /// + /// the map image + public Image GetMap() + { + Image img = new Bitmap(Size.Width, Size.Height); + Graphics g = Graphics.FromImage(img); + RenderMap(g); + g.Dispose(); + return img; + } + + /// + /// Renders the map to an image with the supplied resolution + /// + /// The resolution of the image + /// The map image + public Image GetMap(int resolution) + { + Image img = new Bitmap(Size.Width, Size.Height); + ((Bitmap)img).SetResolution(resolution, resolution); + Graphics g = Graphics.FromImage(img); + RenderMap(g); + g.Dispose(); + return img; + + } + + /// + /// Renders the map to a Metafile (Vectorimage). + /// + /// + /// A Metafile can be saved as WMF,EMF etc. or put onto the clipboard for paste in other applications such av Word-processors which will give + /// a high quality vector image in that application. + /// + /// The current map rendered as to a Metafile + public Metafile GetMapAsMetafile() + { + return GetMapAsMetafile(String.Empty); + } + + /// + /// Renders the map to a Metafile (Vectorimage). + /// + /// The filename of the metafile. If this is null or empty the metafile is not saved. + /// + /// A Metafile can be saved as WMF,EMF etc. or put onto the clipboard for paste in other applications such av Word-processors which will give + /// a high quality vector image in that application. + /// + /// The current map rendered as to a Metafile + public Metafile GetMapAsMetafile(string metafileName) + { + Metafile metafile; + var bm = new Bitmap(1, 1); + using (var g = Graphics.FromImage(bm)) + { + var hdc = g.GetHdc(); + using (var stream = new MemoryStream()) + { + metafile = new Metafile(stream, hdc, new RectangleF(0, 0, Size.Width, Size.Height), + MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); + + using (var metafileGraphics = Graphics.FromImage(metafile)) + { + metafileGraphics.PageUnit = GraphicsUnit.Pixel; + metafileGraphics.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, + new[] { new PointF(Size.Width, Size.Height) }); + + //Render map to metafile + RenderMap(metafileGraphics); + } + + //Save metafile if desired + if (!String.IsNullOrEmpty(metafileName)) + File.WriteAllBytes(metafileName, stream.ToArray()); + } + g.ReleaseHdc(hdc); + } + return metafile; + } + + //ToDo: fill in the blanks + /// + /// + /// + /// + /// + /// + /// + /// + public void MapNewTileAvaliableHandler(ITileAsyncLayer sender, Envelope bbox, Bitmap bm, int sourceWidth, int sourceHeight, ImageAttributes imageAttributes) + { + var e = MapNewTileAvaliable; + if (e != null) + e(sender, bbox, bm, sourceWidth, sourceHeight, imageAttributes); + } + + /// + /// Renders the map using the provided object. + /// + /// the object to use + /// if object is null. + /// if there are no layers to render. + public void RenderMap(Graphics g) + { + OnMapRendering(g); + + if (g == null) + throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); + + //Pauses the timer for VariableLayer + _variableLayers.Pause = true; + + if ((Layers == null || Layers.Count == 0) && (BackgroundLayer == null || BackgroundLayer.Count == 0) && (_variableLayers == null || _variableLayers.Count == 0)) + throw new InvalidOperationException("No layers to render"); + + g.Transform = MapTransform; + + var mvp = (MapViewport) this; + + g.Clear(BackColor); + g.PageUnit = GraphicsUnit.Pixel; + + double zoom = mvp.Zoom; + double scale = double.NaN; //will be resolved if needed + + ILayer[] layerList; + if (_backgroundLayers != null && _backgroundLayers.Count > 0) + { + layerList = new ILayer[_backgroundLayers.Count]; + _backgroundLayers.CopyTo(layerList, 0); + foreach (ILayer layer in layerList) + { + if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) + { + scale = mvp.GetMapScale((int)g.DpiX); + } + double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; + + OnLayerRendering(layer, LayerCollectionType.Background); + if (layer.Enabled) + { + if (layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) + { + LayerCollectionRenderer.RenderLayer(layer, g, mvp); + } + } + OnLayerRendered(layer, LayerCollectionType.Background); + } + } + + if (_layers != null && _layers.Count > 0) + { + layerList = new ILayer[_layers.Count]; + _layers.CopyTo(layerList, 0); + + //int srid = (Layers.Count > 0 ? Layers[0].SRID : -1); //Get the SRID of the first layer + foreach (ILayer layer in layerList) + { + if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) + { + scale = mvp.GetMapScale((int)g.DpiX); + } + double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; + OnLayerRendering(layer, LayerCollectionType.Static); + if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) + LayerCollectionRenderer.RenderLayer(layer, g, mvp); + + OnLayerRendered(layer, LayerCollectionType.Static); + } + } + + if (_variableLayers != null && _variableLayers.Count > 0) + { + layerList = new ILayer[_variableLayers.Count]; + _variableLayers.CopyTo(layerList, 0); + foreach (ILayer layer in layerList) + { + if (layer.VisibilityUnits == VisibilityUnits.Scale && double.IsNaN(scale)) + { + scale = mvp.GetMapScale((int)g.DpiX); + } + double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; + if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) + LayerCollectionRenderer.RenderLayer(layer, g, mvp); + + } + } + +#pragma warning disable 612,618 + RenderDisclaimer(g); +#pragma warning restore 612,618 + + // Render all map decorations + foreach (var mapDecoration in _decorations) + { + mapDecoration.Render(g, mvp); + } + //Resets the timer for VariableLayer + _variableLayers.Pause = false; + + OnMapRendered(g); + } + + /// + /// Fires the RefreshNeeded event. + /// + /// EventArgs argument. + protected virtual void OnRefreshNeeded(EventArgs e) + { + var handler = RefreshNeeded; + if (handler != null) + handler(this, e); + } + + /// + /// Fired when map is rendering + /// + /// + protected virtual void OnMapRendering(Graphics g) + { + var e = MapRendering; + if (e != null) e(g); + } + + /// + /// Fired when Map is rendered + /// + /// + protected virtual void OnMapRendered(Graphics g) + { + var e = MapRendered; + if (e != null) e(g); //Fire render event + } + + /// + /// Method called when starting to render of . This fires the + /// event. + /// + /// The layer to render + /// The collection type + protected virtual void OnLayerRendering(ILayer layer, LayerCollectionType layerCollectionType) + { + var e = LayerRendering; + if (e != null) e(this, new LayerRenderingEventArgs(layer, layerCollectionType)); + } + +#pragma warning disable 612,618 + /// + /// Method called when of has been rendered. This fires the + /// and event. + /// + /// The layer to render + /// The collection type + protected virtual void OnLayerRendered(ILayer layer, LayerCollectionType layerCollectionType) + { + var e = LayerRendered; +#pragma warning restore 612,618 + if (e != null) + { + e(this, EventArgs.Empty); + } + + var eex = LayerRenderedEx; + if (eex != null) + { + eex(this, new LayerRenderingEventArgs(layer, layerCollectionType)); + } + } + + + /// + /// Renders the map using the provided object. + /// + /// the object to use + /// the to use + /// if object is null. + /// if there are no layers to render. + public void RenderMap(Graphics g, LayerCollectionType layerCollectionType) + { + RenderMap(g, layerCollectionType, true, false); + } + + /// + /// Renders the map using the provided object. + /// + /// the object to use + /// the to use + /// Set whether to draw map decorations on the map (if such are set) + /// Set wether to draw with transparent background or with BackColor as background + /// if object is null. + /// if there are no layers to render. + public void RenderMap(Graphics g, LayerCollectionType layerCollectionType, bool drawMapDecorations, bool drawTransparent) + { + if (g == null) + throw new ArgumentNullException("g", "Cannot render map with null graphics object!"); + + _variableLayers.Pause = true; + + LayerCollection lc = null; + switch (layerCollectionType) + { + case LayerCollectionType.Static: + lc = Layers; + break; + case LayerCollectionType.Variable: + lc = VariableLayers; + break; + case LayerCollectionType.Background: + lc = BackgroundLayer; + break; + } + + if (lc == null || lc.Count == 0) + throw new InvalidOperationException("No layers to render"); + + var origTransform = g.Transform; + + g.Transform = MapTransform; + + var mvp = (MapViewport) this; + + if (!drawTransparent) + g.Clear(BackColor); + + g.PageUnit = GraphicsUnit.Pixel; + + //LayerCollectionRenderer.AllowParallel = layerCollectionType == LayerCollectionType.Static; + using (var lcr = new LayerCollectionRenderer(lc)) + { + lcr.Render(g, mvp, layerCollectionType == LayerCollectionType.Static); + } + + /* + var layerList = new ILayer[lc.Count]; + lc.CopyTo(layerList, 0); + + foreach (ILayer layer in layerList) + { + if (layer.Enabled && layer.MaxVisible >= Zoom && layer.MinVisible < Zoom) + layer.Render(g, this); + } + + */ + + if (drawTransparent) + g.Transform = origTransform; + + if (layerCollectionType == LayerCollectionType.Static) + { +#pragma warning disable 612,618 + RenderDisclaimer(g); +#pragma warning restore 612,618 + if (drawMapDecorations) + { + foreach (var mapDecoration in Decorations) + { + mapDecoration.Render(g, mvp); + } + } + } + + + + _variableLayers.Pause = false; + + } + + /// + /// Returns a cloned copy of this map-object. + /// Layers are not cloned. The same instances are referenced from the cloned copy as from the original. + /// The property is however false on this object (which prevents layers beeing disposed and then not usable from the original map) + /// + /// Instance of + public Map Clone() + { + Map clone; + lock (_lockMapTransform) + { + clone = new Map + { + BackColor = BackColor, +#pragma warning disable 612,618 + Disclaimer = Disclaimer, + DisclaimerLocation = DisclaimerLocation, +#pragma warning restore 612,618 + MaximumZoom = MaximumZoom, + MinimumZoom = MinimumZoom, + MaximumExtents = MaximumExtents, + EnforceMaximumExtents = EnforceMaximumExtents, + PixelAspectRatio = PixelAspectRatio, + Zoom = Zoom, + DisposeLayersOnDispose = false, + SRID = SRID, + _id = ID + }; + +#pragma warning disable 612,618 + if (DisclaimerFont != null) + clone.DisclaimerFont = (Font)DisclaimerFont.Clone(); +#pragma warning restore 612,618 + if (MapTransform != null) + clone.MapTransform = MapTransform; + if (!Size.IsEmpty) + clone.Size = new Size(Size.Width, Size.Height); + if (Center != null) + clone.Center = Center.Copy(); + + } + + if (BackgroundLayer != null) + clone.BackgroundLayer.AddCollection(BackgroundLayer.Clone()); + + for (int i = 0; i < Decorations.Count; i++) + clone.Decorations.Add(Decorations[i]); + + if (Layers != null) + clone.Layers.AddCollection(Layers.Clone()); + + if (VariableLayers != null) + clone.VariableLayers.AddCollection(VariableLayers.Clone()); + + return clone; + } + + [Obsolete] + private void RenderDisclaimer(Graphics g) + { + //Disclaimer + if (!String.IsNullOrEmpty(_disclaimer)) + { + var size = VectorRenderer.SizeOfString(g, _disclaimer, _disclaimerFont); + size.Width = (Single)Math.Ceiling(size.Width); + size.Height = (Single)Math.Ceiling(size.Height); + StringFormat sf; + switch (DisclaimerLocation) + { + case 0: //Right-Bottom + sf = new StringFormat(); + sf.Alignment = StringAlignment.Far; + g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, + g.VisibleClipBounds.Width, + g.VisibleClipBounds.Height - size.Height - 2, sf); + break; + case 1: //Right-Top + sf = new StringFormat(); + sf.Alignment = StringAlignment.Far; + g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, + g.VisibleClipBounds.Width, 0f, sf); + break; + case 2: //Left-Top + g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, 0f, 0f); + break; + case 3://Left-Bottom + g.DrawString(Disclaimer, DisclaimerFont, Brushes.Black, 0f, + g.VisibleClipBounds.Height - size.Height - 2); + break; + } + } + } + + /// + /// Returns an enumerable for all layers containing the search parameter in the LayerName property + /// + /// Search parameter + /// IEnumerable + public IEnumerable FindLayer(string layername) + { + return Layers.Where(l => l.LayerName.Contains(layername)); + } + + /// + /// Returns a layer by its name + /// + /// Name of layer + /// Layer + public ILayer GetLayerByName(string name) + { + ILayer lay = null; + if (Layers != null) + { + lay = Layers.GetLayerByName(name); + } + if (lay == null && BackgroundLayer != null) + { + lay = BackgroundLayer.GetLayerByName(name); + } + if (lay == null && VariableLayers != null) + { + lay = VariableLayers.GetLayerByName(name); + } + + return lay; + } + + /// + /// Zooms to the extents of all layers + /// + public void ZoomToExtents() + { + ZoomToBox(GetExtents()); + } + + /// + /// Zooms the map to fit a bounding box + /// + /// + /// NOTE: If the aspect ratio of the box and the aspect ratio of the mapsize + /// isn't the same, the resulting map-envelope will be adjusted so that it contains + /// the bounding box, thus making the resulting envelope larger! + /// + /// + public void ZoomToBox(Envelope bbox) + { + if (bbox != null && !bbox.IsNull) + { + //Ensure aspect ratio + var resX = Size.Width == 0 ? double.MaxValue : bbox.Width / Size.Width; + var resY = Size.Height == 0 ? double.MaxValue : bbox.Height / Size.Height; + var zoom = bbox.Width; + if (resY > resX && resX > 0) + { + zoom *= resY / resX; + } + + var center = new Coordinate(bbox.Centre); + + zoom = _mapViewportGuard.VerifyZoom(zoom, center); + var changed = false; + if (zoom != _zoom) + { + _zoom = zoom; + changed = true; + } + + if (!center.Equals2D(_center)) + { + _center = center; + changed = true; + } + + if (changed && MapViewOnChange != null) + MapViewOnChange(); + } + } + + /// + /// Converts a point from world coordinates to image coordinates based on the current + /// zoom, center and mapsize. + /// + /// Point in world coordinates + /// Indicates whether MapTransform should be taken into account + /// Point in image coordinates + public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) + { + var pTmp = Transform.WorldtoMap(p, this); + if (!careAboutMapTransform || MapTransformRotation.Equals(0f)) + return pTmp; + + using (var transform = MapTransform) + { + var pts = new[] {pTmp}; + transform.TransformPoints(pts); + return pts[0]; + } + } + + /// + /// Converts a point from world coordinates to image coordinates based on the current + /// zoom, center and mapsize. + /// + /// Point in world coordinates + /// Point in image coordinates + public PointF WorldToImage(Point p) + { + return WorldToImage(p, false); + } + + /// + /// Converts a point from image coordinates to world coordinates based on the current + /// zoom, center and mapsize. + /// + /// Point in image coordinates + /// Point in world coordinates + public Point ImageToWorld(PointF p) + { + return ImageToWorld(p, false); + } + /// + /// Converts a point from image coordinates to world coordinates based on the current + /// zoom, center and mapsize. + /// + /// Point in image coordinates + /// Indicates whether MapTransform should be taken into account + /// Point in world coordinates + public Point ImageToWorld(PointF p, bool careAboutMapTransform) + { + if (careAboutMapTransform && !MapTransformRotation.Equals(0f)) + using (var transformInv = MapTransformInverted) + { + var pts = new[] { p }; + transformInv.TransformPoints(pts); + p = pts[0]; + } + + return Transform.MapToWorld(p, this); + } + + #endregion + + #region Properties + + /// + /// Gets or sets the unique identifier of the map. + /// + public Guid ID + { + get { return _id; } + set { _id = value; } + } + + /// + /// Gets or sets the SRID of the map + /// + public int SRID + { + get { return _srid; } + set + { + if (_srid == value) + return; + _srid = value; + Factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(_srid); + } + } + + /// + /// Factory used to create geometries + /// + public IGeometryFactory Factory { get; private set; } + + /// + /// List of all map decorations + /// + public IList Decorations + { + get { return _decorations; } + } + + /// + /// Gets the extents of the current map based on the current zoom, center and size. + /// If a is applied, the envelope containing the rotated view + /// will be returned, which is used by layers to spatially select data. However, + /// the aspect ratio will probably not be the same as Map. + /// + public Envelope Envelope + { + get + { + if (double.IsNaN(MapHeight) || double.IsInfinity(MapHeight)) + return new Envelope(0, 0, 0, 0); + + var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); + var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); + + if (MapTransformRotation.Equals(0f)) + return new Envelope(ll, ur); + else + { + var pts = new[] { new PointF((float)ll.X, (float)ll.Y), + new PointF((float)ll.X, (float)ur.Y), + new PointF((float)ur.X, (float)ur.Y), + new PointF((float)ur.X, (float)ll.Y)}; + + Matrix matrix = new Matrix(); + matrix.RotateAt(-MapTransformRotation, new PointF((float)Center.X, (float)Center.Y)); + matrix.TransformPoints(pts); + + return new Envelope(Math.Min(Math.Min(Math.Min(pts[0].X, pts[1].X), pts[2].X), pts[3].X), + Math.Max(Math.Max(Math.Max(pts[0].X, pts[1].X), pts[2].X), pts[3].X), + Math.Min(Math.Min(Math.Min(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y), + Math.Max(Math.Max(Math.Max(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y)); + } + + } + } + + /// + /// Getter returns a CLONE. Using the you can alter the coordinate system of the map rendering. + /// This makes it possible to rotate or rescale the image, for instance to have another direction than north upwards. + /// + /// + /// Rotate the map output 45 degrees around its center: + /// + /// System.Drawing.Drawing2D.Matrix maptransform = new System.Drawing.Drawing2D.Matrix(); //Create transformation matrix + /// maptransform.RotateAt(45,new PointF(myMap.Size.Width/2,myMap.Size.Height/2)); //Apply 45 degrees rotation around the center of the map + /// myMap.MapTransform = maptransform; //Apply transformation to map + /// + /// + public Matrix MapTransform + { + get + { + lock (_lockMapTransform) + return new Matrix( + _mapTransformElements[0], + _mapTransformElements[1], + _mapTransformElements[2], + _mapTransformElements[3], + _mapTransformElements[4], + _mapTransformElements[5]); + } + set + { + lock (_lockMapTransform) + { + if (value == null) + value = new Matrix(); + + if (!value.IsInvertible) + throw new ArgumentException("Matrix not invertible", nameof(value)); + + _mapTransformElements = value.Elements; + + lock (_lockMapTransformInverted) + { + var inverted = value.Clone(); + inverted.Invert(); + _mapTransformInvertedElements = inverted.Elements; + } + + if (value.IsIdentity) + MapTransformRotation = 0f; + else + { + var rad = value.Elements[1] >= 0 ? Math.Acos(value.Elements[0]) : -Math.Acos(value.Elements[0]); + if (rad < 0) + rad += 2 * Math.PI; + MapTransformRotation = (float)(rad * 180.0 / Math.PI); + } + } + + } + } + + internal Matrix MapTransformInverted + { + get + { + lock (_lockMapTransformInverted) + return new Matrix( + _mapTransformInvertedElements[0], + _mapTransformInvertedElements[1], + _mapTransformInvertedElements[2], + _mapTransformInvertedElements[3], + _mapTransformInvertedElements[4], + _mapTransformInvertedElements[5]); + } + } + + /// + /// MapTransform Rotation in degrees. Facilitates determining if map is rotated without locking MapTransform. + /// Positive rotation is applied anti-clockwise, with the apparent effect of north arrow rotating clockwise. + /// + public float MapTransformRotation { get; private set; } + + /// + /// A collection of layers. The first layer in the list is drawn first, the last one on top. + /// + public LayerCollection Layers + { + get { return _layers; } + } + + /// + /// Collection of background Layers + /// + public LayerCollection BackgroundLayer + { + get { return _backgroundLayers; } + } + + /// + /// A collection of layers. The first layer in the list is drawn first, the last one on top. + /// + public VariableLayerCollection VariableLayers + { + get { return _variableLayers; } + } + + /// + /// Map background color (defaults to transparent) + /// + public Color BackColor + { + get { return _backgroundColor; } + set + { + _backgroundColor = value; + if (MapViewOnChange != null) + MapViewOnChange(); + } + } + + /// + /// Center of map in WCS + /// + public Point Center + { + get { return _center; } + set + { + if (value == null) + throw new ArgumentNullException("value"); + + var newZoom = _zoom; + var newCenter = new Coordinate(value); + + newZoom = _mapViewportGuard.VerifyZoom(newZoom, newCenter); + + var changed = false; + if (newZoom != _zoom) + { + _zoom = newZoom; + changed = true; + } + + if (!newCenter.Equals2D(_center)) + { + _center = newCenter; + changed = true; + } + + if (changed && MapViewOnChange != null) + MapViewOnChange(); + } + } + + private static int? _dpiX; + + /// + /// Gets or Sets the Scale of the map (related to current DPI-settings of rendering) + /// + public double MapScale + { + get + { + if (!_dpiX.HasValue) + { + using (var g = Graphics.FromHwnd(IntPtr.Zero)) + { + _dpiX = (int)g.DpiX; + } + } + + return GetMapScale(_dpiX.Value); + } + set + { + if (!_dpiX.HasValue) + { + using (var g = Graphics.FromHwnd(IntPtr.Zero)) + { + _dpiX = (int)g.DpiX; + } + } + Zoom = GetMapZoomFromScale(value, _dpiX.Value); + + } + } + + /// + /// Calculated the Zoom value for a given Scale-value + /// + /// + /// + /// + public double GetMapZoomFromScale(double scale, int dpi) + { + return ScaleCalculations.GetMapZoomFromScaleNonLatLong(scale, 1, dpi, Size.Width); + } + + /// + /// Returns the mapscale if the map was to be rendered with the specified DPI-settings + /// + /// + /// + public double GetMapScale(int dpi) + { + return ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); + } + + /// + /// Gets or sets the zoom level of map. + /// + /// + /// The zoom level corresponds to the width of the map in WCS units. + /// A zoomlevel of 0 will result in an empty map being rendered, but will not throw an exception + /// + public double Zoom + { + get { return _zoom; } + set + { + var newCenter = new Coordinate(_center); + value = _mapViewportGuard.VerifyZoom(value, newCenter); + + if (value.Equals(_zoom)) + return; + + _zoom = value; + if (!newCenter.Equals2D(_center)) + _center = newCenter; + + if (MapViewOnChange != null) + MapViewOnChange(); + } + } + + /// + /// Get Returns the size of a pixel in world coordinate units + /// + public double PixelSize + { + get { return Zoom / Size.Width; } + } + + /// + /// Returns the width of a pixel in world coordinate units. + /// + /// The value returned is the same as . + public double PixelWidth + { + get { return PixelSize; } + } + + /// + /// Returns the height of a pixel in world coordinate units. + /// + /// The value returned is the same as unless is different from 1. + public double PixelHeight + { + get { return PixelSize * _mapViewportGuard.PixelAspectRatio; } + } + + /// + /// Gets or sets the aspect-ratio of the pixel scales. A value less than + /// 1 will make the map stretch upwards, and larger than 1 will make it smaller. + /// + /// Throws an argument exception when value is 0 or less. + public double PixelAspectRatio + { + get { return _mapViewportGuard.PixelAspectRatio; } + set + { + _mapViewportGuard.PixelAspectRatio = value; + } + } + + /// + /// Height of map in world units + /// + /// + public double MapHeight + { + get { return (Zoom * Size.Height) / Size.Width * PixelAspectRatio; } + } + + /// + /// Size of output map + /// + public Size Size + { + get { return _mapViewportGuard.Size; } + set { _mapViewportGuard.Size = value; } + } + + /// + /// Minimum zoom amount allowed + /// + public double MinimumZoom + { + get { return _mapViewportGuard.MinimumZoom; } + set + { + _mapViewportGuard.MinimumZoom = value; + } + } + + /// + /// Maximum zoom amount allowed + /// + public double MaximumZoom + { + get { return _mapViewportGuard.MaximumZoom; } + set + { + _mapViewportGuard.MaximumZoom = value; + } + } + + /// + /// Gets the extents of the map based on the extents of all the layers in the layers collection + /// + /// Full map extents + public Envelope GetExtents() + { + if (!_mapViewportGuard.MaximumExtents.IsNull) + return MaximumExtents; + + if ((Layers == null || Layers.Count == 0) && + (VariableLayers == null || VariableLayers.Count == 0) && + (BackgroundLayer == null || BackgroundLayer.Count == 0)) + throw (new InvalidOperationException("No layers to zoom to")); + + Envelope bbox = null; + + ExtendBoxForCollection(Layers, ref bbox); + ExtendBoxForCollection(VariableLayers, ref bbox); + ExtendBoxForCollection(BackgroundLayer, ref bbox); + + return bbox; + } + + /// + /// Gets or sets a value indicating the maximum visible extent + /// + public Envelope MaximumExtents + { + get { return _mapViewportGuard.MaximumExtents; } + set { _mapViewportGuard.MaximumExtents = value; } + } + + /// + /// Gets or sets a value indicating if should be enforced or not. + /// + public bool EnforceMaximumExtents + { + get { return _mapViewportGuard.EnforceMaximumExtents; } + set { _mapViewportGuard.EnforceMaximumExtents = value; } + } + + private static void ExtendBoxForCollection(IEnumerable layersCollection, ref Envelope bbox) + { + foreach (var l in layersCollection) + { + + //Tries to get bb. Fails on some specific shapes and Mercator projects (World.shp) + Envelope bb; + try + { + bb = l.Envelope; + } + catch (Exception) + { + bb = new Envelope(new Coordinate(-20037508.342789, -20037508.342789), new Coordinate(20037508.342789, 20037508.342789)); + } + + if (bbox == null) + bbox = bb; + else + { + //FB: bb can be null on empty layers (e.g. temporary working layers with no data objects) + if (bb != null) + bbox.ExpandToInclude(bb); + } + + } + } + + #endregion + + #region Disclaimer + + private String _disclaimer; + /// + /// Copyright notice to be placed on the map + /// + [Obsolete("Use Disclaimer as MapDecoration instead!")] + public String Disclaimer + { + get { return _disclaimer; } + set + { + //only set disclaimer if not already done + if (String.IsNullOrEmpty(_disclaimer)) + { + _disclaimer = value; + //Ensure that Font for disclaimer is set + if (_disclaimerFont == null) + _disclaimerFont = new Font(FontFamily.GenericSansSerif, 8f); + } + } + } + + private Font _disclaimerFont; + /// + /// Font to use for the Disclaimer + /// + [Obsolete("Use Disclaimer as MapDecoration instead!")] + public Font DisclaimerFont + { + get { return _disclaimerFont; } + set + { + if (value == null) return; + _disclaimerFont = value; + } + } + + private Int32 _disclaimerLocation; + + /// + /// Location for the disclaimer + /// 2|1 + /// -+- + /// 3|0 + /// + [Obsolete("Use Disclaimer as MapDecoration instead!")] + public Int32 DisclaimerLocation + { + get { return _disclaimerLocation; } + set { _disclaimerLocation = value % 4; } + } + + + #endregion + } + + /// + /// Layer rendering event arguments class + /// + public class LayerRenderingEventArgs : EventArgs + { + /// + /// The layer that is being or has been rendered + /// + public readonly ILayer Layer; + + /// + /// The layer collection type the layer belongs to. + /// + public readonly LayerCollectionType LayerCollectionType; + + /// + /// Creates an instance of this class + /// + /// The layer that is being or has been rendered + /// The layer collection type the layer belongs to. + public LayerRenderingEventArgs(ILayer layer, LayerCollectionType layerCollectionType) + { + Layer = layer; + LayerCollectionType = layerCollectionType; + } + } + +} diff --git a/SharpMap/Rendering/Decoration/Disclaimer.cs b/SharpMap/Rendering/Decoration/Disclaimer.cs index 9b27ed98..1ab225a4 100644 --- a/SharpMap/Rendering/Decoration/Disclaimer.cs +++ b/SharpMap/Rendering/Decoration/Disclaimer.cs @@ -1,126 +1,127 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using SharpMap.Rendering.Symbolizer; - -namespace SharpMap.Rendering.Decoration -{ - /// - /// Disclaimer map decoration - /// - [Serializable] - public class Disclaimer : MapDecoration - { - /// - /// Creates an instance of this class - /// - public Disclaimer() - { - Font = SystemFonts.DefaultFont; - ForeColor = Color.Black; - Format = StringFormat.GenericTypographic; - Text = "Powered by SharpMap"; - Anchor = MapDecorationAnchor.CenterBottom; - Font = new Font(FontFamily.GenericSansSerif, 8f, FontStyle.Italic); - BorderMargin = new Size(3, 3); - BorderColor = Color.Black; - BorderWidth = 1; - - RoundedEdges = true; - } - - /// - /// Gets or sets the disclaimer text - /// - public string Text { get; set; } - - /// - /// Gets or sets the disclaimer font - /// - public Font Font { get; set; } - - /// - /// Gets or sets the font color - /// - public Color ForeColor - { - get ; set; - } - - private Pen _halo; - [NonSerialized] - private Color _haloColor; - - /// - /// Gets or sets the halo width. A width of 0 disables rendering halo - /// - public int Halo - { - get { return _halo == null ? 0 : (int) _halo.Width; } - set - { - if (value < 0) value = 0; - if (value == 0) - _halo = null; - else - _halo = new Pen(_haloColor, value); - } - } - - /// - /// Gets or sets the halo color - /// - public Color HaloColor - { - get { return _haloColor; } - set { - _haloColor = value; - if (Halo > 0) - _halo = new Pen(value, Halo); - } - } - - /// - /// Gets or sets the Format - /// - public StringFormat Format { get; set; } - - #region MapDecoration overrides - - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// - /// - /// The - protected override Size InternalSize(Graphics g, Map map) - { - var s = g.MeasureString(Text, Font); - return new Size((int)Math.Ceiling(s.Width), (int)Math.Ceiling(s.Height)); - } - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected override void OnRender(Graphics g, Map map) - { - var layoutRectangle = g.ClipBounds; - var b = new SolidBrush(OpacityColor(ForeColor)); - if (Halo > 0) - { - var gp = new GraphicsPath(); - gp.AddString(Text, Font.FontFamily, (int)Font.Style, Utility.ScaleSizeToDeviceUnits(Font.SizeInPoints, GraphicsUnit.Point, g), layoutRectangle, Format); - g.DrawPath(_halo, gp); - g.FillPath(b, gp); - } - else - g.DrawString(Text, Font, b, layoutRectangle); - - } - - #endregion - } -} \ No newline at end of file +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using SharpMap.Rendering.Symbolizer; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// Disclaimer map decoration + /// + [Serializable] + public class Disclaimer : MapDecoration + { + /// + /// Creates an instance of this class + /// + public Disclaimer() + { + Font = SystemFonts.DefaultFont; + ForeColor = Color.Black; + Format = StringFormat.GenericTypographic; + Text = "Powered by SharpMap"; + Anchor = MapDecorationAnchor.CenterBottom; + Font = new Font(FontFamily.GenericSansSerif, 8f, FontStyle.Italic); + BorderMargin = new Size(3, 3); + BorderColor = Color.Black; + BorderWidth = 1; + + RoundedEdges = true; + } + + /// + /// Gets or sets the disclaimer text + /// + public string Text { get; set; } + + /// + /// Gets or sets the disclaimer font + /// + public Font Font { get; set; } + + /// + /// Gets or sets the font color + /// + public Color ForeColor + { + get ; set; + } + + private Pen _halo; + [NonSerialized] + private Color _haloColor; + + /// + /// Gets or sets the halo width. A width of 0 disables rendering halo + /// + public int Halo + { + get { return _halo == null ? 0 : (int) _halo.Width; } + set + { + if (value < 0) value = 0; + if (value == 0) + _halo = null; + else + _halo = new Pen(_haloColor, value); + } + } + + /// + /// Gets or sets the halo color + /// + public Color HaloColor + { + get { return _haloColor; } + set { + _haloColor = value; + if (Halo > 0) + _halo = new Pen(value, Halo); + } + } + + /// + /// Gets or sets the Format + /// + public StringFormat Format { get; set; } + + #region MapDecoration overrides + + /// + /// Function to compute the required size for rendering the map decoration object + /// This is just the size of the decoration object, border settings are excluded + /// + /// + /// + /// The + protected override Size InternalSize(Graphics g, MapViewport map) + { + var s = g.MeasureString(Text, Font); + return new Size((int)Math.Ceiling(s.Width), (int)Math.Ceiling(s.Height)); + } + + /// + /// Function to render the actual map decoration + /// + /// + /// + protected override void OnRender(Graphics g, MapViewport map) + { + var layoutRectangle = g.ClipBounds; + var b = new SolidBrush(OpacityColor(ForeColor)); + if (Halo > 0) + { + var gp = new GraphicsPath(); + gp.AddString(Text, Font.FontFamily, (int) Font.Style, + Utility.ScaleSizeToDeviceUnits(Font.SizeInPoints, GraphicsUnit.Point, g), layoutRectangle, Format); + g.DrawPath(_halo, gp); + g.FillPath(b, gp); + } + else + g.DrawString(Text, Font, b, layoutRectangle); + + } + + #endregion + } +} diff --git a/SharpMap/Rendering/Decoration/EyeOfSight.cs b/SharpMap/Rendering/Decoration/EyeOfSight.cs index dda66604..ffd9e9e0 100644 --- a/SharpMap/Rendering/Decoration/EyeOfSight.cs +++ b/SharpMap/Rendering/Decoration/EyeOfSight.cs @@ -1,107 +1,106 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; - -namespace SharpMap.Rendering.Decoration -{ - /// - /// Eye of sight class - /// - [Serializable] - public class EyeOfSight : NorthArrow - { - private static readonly string[] Directions = {"N", "E", "S", "W"}; - - private static Bitmap GetEyeOfSightImage() - { - var roestte = new Bitmap(120, 120); - - //Anyone for a more sophisticated roestte? - using (var g = Graphics.FromImage(roestte)) - { - var t = new Matrix(1f, 0f, 0f, 1f, 60, 60); - g.Transform = t; - - var f = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold); - var b = new SolidBrush(Color.Black); - var p = new Pen(Color.Black, 5); - var sf = new StringFormat(StringFormat.GenericTypographic) {Alignment = StringAlignment.Center}; - var rect = new RectangleF(- 45f, - 45f, 90f, 90f); - - foreach (var s in Directions) - { - g.DrawString(s, f, b, 0, -55, sf); - g.DrawArc(p, rect, 290f, 50f); - g.RotateTransform(90f); - } - } - return roestte; - } - /// - /// Creates an instance of this class - /// - public EyeOfSight() - { - NorthArrowImage = GetEyeOfSightImage(); - } - - /// - /// Gets or sets the outline color - /// - public Color NeedleOutlineColor { get; set; } - - /// - /// The width of the needle outline - /// - public int NeedleOutlineWidth { get; set; } - - /// - /// The color to - /// - public Color NeedleFillColor { get; set; } - - #region MapDecoration overrides - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected override void OnRender(Graphics g, Map map) - { - // Render the rosetta - base.OnRender(g, map); - - var clip = g.ClipBounds; - var oldTransform = g.Transform; - var newTransform = new Matrix(1f, 0f, 0f, 1f, clip.Left + Size.Width*0.5f, clip.Top + Size.Height*0.5f); - - g.Transform = newTransform; - - var width = Size.Width; - var height = Size.Height; - var pts = new[] - { - new PointF(0f, -0.35f*height), - new PointF(0.125f*width, 0.35f*height), - new PointF(0f, 0.275f*height), - new PointF(-0.125f*width, 0.35f*height), - new PointF(0f, -0.35f*height), - }; - - // need to outline the needle - if (NeedleOutlineWidth>0) - { - g.DrawPolygon(new Pen(OpacityColor(NeedleOutlineColor), NeedleOutlineWidth), pts); - } - - // need to outline the needle - g.FillPolygon(new SolidBrush(OpacityColor(NeedleFillColor)), pts ); - - g.Transform = oldTransform; - - } - - #endregion - } -} \ No newline at end of file +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// Eye of sight class + /// + [Serializable] + public class EyeOfSight : NorthArrow + { + private static readonly string[] Directions = {"N", "E", "S", "W"}; + + private static Bitmap GetEyeOfSightImage() + { + var roestte = new Bitmap(120, 120); + + //Anyone for a more sophisticated roestte? + using (var g = Graphics.FromImage(roestte)) + { + var t = new Matrix(1f, 0f, 0f, 1f, 60, 60); + g.Transform = t; + + var f = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold); + var b = new SolidBrush(Color.Black); + var p = new Pen(Color.Black, 5); + var sf = new StringFormat(StringFormat.GenericTypographic) {Alignment = StringAlignment.Center}; + var rect = new RectangleF(- 45f, - 45f, 90f, 90f); + + foreach (var s in Directions) + { + g.DrawString(s, f, b, 0, -55, sf); + g.DrawArc(p, rect, 290f, 50f); + g.RotateTransform(90f); + } + } + return roestte; + } + /// + /// Creates an instance of this class + /// + public EyeOfSight() + { + NorthArrowImage = GetEyeOfSightImage(); + } + + /// + /// Gets or sets the outline color + /// + public Color NeedleOutlineColor { get; set; } + + /// + /// The width of the needle outline + /// + public int NeedleOutlineWidth { get; set; } + + /// + /// The color to + /// + public Color NeedleFillColor { get; set; } + + #region MapDecoration overrides + + /// + /// Function to render the actual map decoration + /// + /// + /// + protected override void OnRender(Graphics g, MapViewport map) + { + // Render the rosetta + base.OnRender(g, map); + + var clip = g.ClipBounds; + var oldTransform = g.Transform; + var newTransform = new Matrix(1f, 0f, 0f, 1f, clip.Left + Size.Width*0.5f, clip.Top + Size.Height*0.5f); + + g.Transform = newTransform; + + var width = Size.Width; + var height = Size.Height; + var pts = new[] + { + new PointF(0f, -0.35f*height), + new PointF(0.125f*width, 0.35f*height), + new PointF(0f, 0.275f*height), + new PointF(-0.125f*width, 0.35f*height), + new PointF(0f, -0.35f*height), + }; + + // need to outline the needle + if (NeedleOutlineWidth>0) + { + g.DrawPolygon(new Pen(OpacityColor(NeedleOutlineColor), NeedleOutlineWidth), pts); + } + + // need to outline the needle + g.FillPolygon(new SolidBrush(OpacityColor(NeedleFillColor)), pts ); + + g.Transform = oldTransform; + } + + #endregion + } +} diff --git a/SharpMap/Rendering/Decoration/IMapDecoration.cs b/SharpMap/Rendering/Decoration/IMapDecoration.cs index 16287d3d..84154eb0 100644 --- a/SharpMap/Rendering/Decoration/IMapDecoration.cs +++ b/SharpMap/Rendering/Decoration/IMapDecoration.cs @@ -1,17 +1,21 @@ -using System.Drawing; - -namespace SharpMap.Rendering.Decoration -{ - /// - /// Interface for all map decorations - /// - public interface IMapDecoration - { - /// - /// Renders the map decoration to the graphics object - /// - /// The graphics object - /// The map - void Render(Graphics g, Map map); - } -} \ No newline at end of file +using System; +using System.Drawing; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// Interface for all map decorations + /// + public interface IMapDecoration + { + /// + /// Renders the map decoration to the graphics object + /// + /// The graphics object + /// The map viewport + void Render(Graphics g, MapViewport map); + + [Obsolete("Use Render (Graphics, MapViewport)")] + void Render(Graphics g, Map map); + } +} diff --git a/SharpMap/Rendering/Decoration/MapDecoration.cs b/SharpMap/Rendering/Decoration/MapDecoration.cs index 404d1e26..e1b3f86b 100644 --- a/SharpMap/Rendering/Decoration/MapDecoration.cs +++ b/SharpMap/Rendering/Decoration/MapDecoration.cs @@ -60,7 +60,7 @@ protected MapDecoration() /// /// /// - private Point GetLocation(Map map) + private Point GetLocation(MapViewport map) { var clipRect = map.Size; var objectSize = Size; @@ -156,7 +156,7 @@ public float Opacity /// public bool RoundedEdges { get; set; } -#endregion + #endregion /// /// Function to compute the required size for rendering the map decoration object @@ -165,9 +165,15 @@ public float Opacity /// The graphics object /// The map /// The size of the map decoration - protected abstract Size InternalSize(Graphics g, Map map); + protected abstract Size InternalSize(Graphics g, MapViewport map); + + [Obsolete("Use InternalSize(Graphics, MapViewport")] + protected virtual Size InternalSize(Graphics g, Map map) + { + return InternalSize(g, (MapViewport) map); + } - private void CalcMapDecorationMetrics(Graphics g, Map map) + private void CalcMapDecorationMetrics(Graphics g, MapViewport map) { _cachedSize = InternalSize(g, map); var rect = new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize); @@ -179,7 +185,7 @@ private Size Size get { return Size.Add(_cachedSize, Size.Add(BorderMargin, BorderMargin)); } } - private Region GetClipRegion(Map map) + private Region GetClipRegion(MapViewport map) { return new Region(new Rectangle(Point.Add(GetLocation(map), BorderMargin), _cachedSize)); } @@ -216,12 +222,13 @@ private static GraphicsPath CreateRoundedRectangle(Rectangle rectangle, Size mar return gp; } + /// - /// + /// Draw the map decoration /// /// /// - public void Render(Graphics g, Map map) + public void Render(Graphics g, MapViewport map) { //Is this map decoration enabled? if (!Enabled) @@ -257,30 +264,57 @@ public void Render(Graphics g, Map map) OnRendered(g, map); } + [Obsolete("Use Render(Graphics, MapViewport")] + public void Render(Graphics g, Map map) + { + Render(g, (MapViewport)map); + } + + /// /// Function to render the actual map decoration /// /// /// + protected virtual void OnRender(Graphics g, MapViewport map) + { + } + + [Obsolete("Use OnRender(Graphics, MapViewport")] protected virtual void OnRender(Graphics g, Map map) { + OnRender(g, (MapViewport) map); } + /// /// Function to render the actual map decoration /// /// /// - protected virtual void OnRendering(Graphics g, Map map) + protected virtual void OnRendering(Graphics g, MapViewport map) { CalcMapDecorationMetrics(g, map); } + + [Obsolete("Use OnRendering(Graphics, MapViewport")] + protected virtual void OnRendering(Graphics g, Map map) + { + OnRendering(g, (MapViewport)map); + } + /// /// Function to render the actual map decoration /// /// /// + protected virtual void OnRendered(Graphics g, MapViewport map) + { + } + + [Obsolete("Use OnRendered(Graphics, MapViewport")] protected virtual void OnRendered(Graphics g, Map map) { + OnRendered(g, (MapViewport) map); } } } diff --git a/SharpMap/Rendering/Decoration/NorthArrow.cs b/SharpMap/Rendering/Decoration/NorthArrow.cs index 12b96cf2..73be4051 100644 --- a/SharpMap/Rendering/Decoration/NorthArrow.cs +++ b/SharpMap/Rendering/Decoration/NorthArrow.cs @@ -1,132 +1,133 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using SharpMap.Utilities; - -namespace SharpMap.Rendering.Decoration -{ - /// - /// North arrow map decoration - /// - [Serializable] - public class NorthArrow : MapDecoration - { - private static readonly object _lockObject = new object(); - private static readonly Bitmap DefaultNorthArrowBitmap; - - static NorthArrow() - { - lock(_lockObject) - { - DefaultNorthArrowBitmap = new Bitmap(120, 120); - using (var g = Graphics.FromImage(DefaultNorthArrowBitmap)) - { - g.Clear(Color.Transparent); - var b = new SolidBrush(Color.Black); - var p = new Pen(new SolidBrush(Color.Black), 10) {LineJoin = LineJoin.Miter}; - g.FillEllipse(b, new RectangleF(50, 50, 20, 20)); - g.DrawLine(p, 60, 110, 60, 40); - var pts = new[] {new PointF(45, 40), new PointF(60, 10), new PointF(75, 40), new PointF(45, 40)}; - g.FillPolygon(b, pts); - g.DrawPolygon(p, pts); - - b = new SolidBrush(Color.White); - g.DrawString("N", new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel), b, new RectangleF(50, 25, 20, 20), - new StringFormat - {LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center}); - } - } - } - - /// - /// Creates an instance of this class - /// - public NorthArrow() - { - Size = new Size(45, 45); - ForeColor = Color.Silver; - Location = new Point(5, 5); - Anchor = MapDecorationAnchor.LeftTop; - } - - /// - /// Gets or sets the NorthArrowImage - /// - public Image NorthArrowImage { get; set; } - - /// - /// Gets or sets the size of the North arrow Bitmap - /// - public Size Size { get; set; } - - /// - /// Gets or sets the fore color - /// - public Color ForeColor { get; set; } - - - #region MapDecoration overrides - - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// The graphics object - /// The map - /// The size of the map decoration - protected override Size InternalSize(Graphics g, Map map) - { - return Size; - } - - /// - /// Function to render the actual map decoration - /// - /// - /// - protected override void OnRender(Graphics g, Map map) - { - var image = NorthArrowImage ?? DefaultNorthArrowBitmap; - - var mapSize = map.Size; - - //Get rotation - var ptTop = map.ImageToWorld(new PointF(mapSize.Width/2f, 0f),true); - var ptBottom = map.ImageToWorld(new PointF(mapSize.Width / 2f, mapSize.Height * 0.5f), true); - - var dx = ptTop.X - ptBottom.X; - var dy = ptBottom.Y - ptTop.Y; - var length = Math.Sqrt(dx*dx + dy*dy); - - var cos = dx/length; - - var rot = -90 + (dy > 0 ? -1 : 1) * Math.Acos(cos) / GeoSpatialMath.DegToRad; - var halfSize = new Size((int)(0.5f*Size.Width), (int)(0.5f*Size.Height)); - var oldTransform = g.Transform; - - var clip = g.ClipBounds; - var newTransform = new Matrix(1f, 0f, 0f, 1f, - clip.Left + halfSize.Width, - clip.Top + halfSize.Height); - newTransform.Rotate((float)rot); - - // Setup image attributes - var ia = new ImageAttributes(); - var cmap = new [] { - new ColorMap { OldColor = Color.Transparent, NewColor = OpacityColor(BackgroundColor) }, - new ColorMap { OldColor = Color.Black, NewColor = OpacityColor(ForeColor) } - }; - ia.SetRemapTable( cmap ); - - g.Transform = newTransform; - - var rect = new Rectangle(-halfSize.Width, -halfSize.Height, Size.Width, Size.Height); - g.DrawImage(image, rect, 0, 0, image.Size.Width, image.Size.Height, GraphicsUnit.Pixel, ia); - - g.Transform = oldTransform; - } - - #endregion - } -} \ No newline at end of file +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using SharpMap.Utilities; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// North arrow map decoration + /// + [Serializable] + public class NorthArrow : MapDecoration + { + private static readonly object _lockObject = new object(); + private static readonly Bitmap DefaultNorthArrowBitmap; + + static NorthArrow() + { + lock(_lockObject) + { + DefaultNorthArrowBitmap = new Bitmap(120, 120); + using (var g = Graphics.FromImage(DefaultNorthArrowBitmap)) + { + g.Clear(Color.Transparent); + var b = new SolidBrush(Color.Black); + var p = new Pen(new SolidBrush(Color.Black), 10) {LineJoin = LineJoin.Miter}; + g.FillEllipse(b, new RectangleF(50, 50, 20, 20)); + g.DrawLine(p, 60, 110, 60, 40); + var pts = new[] {new PointF(45, 40), new PointF(60, 10), new PointF(75, 40), new PointF(45, 40)}; + g.FillPolygon(b, pts); + g.DrawPolygon(p, pts); + + b = new SolidBrush(Color.White); + g.DrawString("N", new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel), b, new RectangleF(50, 25, 20, 20), + new StringFormat + {LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center}); + } + } + } + + /// + /// Creates an instance of this class + /// + public NorthArrow() + { + Size = new Size(45, 45); + ForeColor = Color.Silver; + Location = new Point(5, 5); + Anchor = MapDecorationAnchor.LeftTop; + } + + /// + /// Gets or sets the NorthArrowImage + /// + public Image NorthArrowImage { get; set; } + + /// + /// Gets or sets the size of the North arrow Bitmap + /// + public Size Size { get; set; } + + + /// + /// Gets or sets the fore color + /// + public Color ForeColor { get; set; } + + + #region MapDecoration overrides + + /// + /// Function to compute the required size for rendering the map decoration object + /// This is just the size of the decoration object, border settings are excluded + /// + /// The graphics object + /// The map + /// The size of the map decoration + protected override Size InternalSize(Graphics g, MapViewport map) + { + return Size; + } + + /// + /// Function to render the actual map decoration + /// + /// + /// + protected override void OnRender(Graphics g, MapViewport map) + { + var image = NorthArrowImage ?? DefaultNorthArrowBitmap; + + var mapSize = map.Size; + + //Get rotation + var ptTop = map.ImageToWorld(new PointF(mapSize.Width/2f, 0f),true); + var ptBottom = map.ImageToWorld(new PointF(mapSize.Width / 2f, mapSize.Height * 0.5f), true); + + var dx = ptTop.X - ptBottom.X; + var dy = ptBottom.Y - ptTop.Y; + var length = Math.Sqrt(dx*dx + dy*dy); + + var cos = dx/length; + + var rot = -90 + (dy > 0 ? -1 : 1) * Math.Acos(cos) / GeoSpatialMath.DegToRad; + var halfSize = new Size((int)(0.5f*Size.Width), (int)(0.5f*Size.Height)); + var oldTransform = g.Transform; + + var clip = g.ClipBounds; + var newTransform = new Matrix(1f, 0f, 0f, 1f, + clip.Left + halfSize.Width, + clip.Top + halfSize.Height); + newTransform.Rotate((float)rot); + + // Setup image attributes + var ia = new ImageAttributes(); + var cmap = new [] { + new ColorMap { OldColor = Color.Transparent, NewColor = OpacityColor(BackgroundColor) }, + new ColorMap { OldColor = Color.Black, NewColor = OpacityColor(ForeColor) } + }; + ia.SetRemapTable( cmap ); + + g.Transform = newTransform; + + var rect = new Rectangle(-halfSize.Width, -halfSize.Height, Size.Width, Size.Height); + g.DrawImage(image, rect, 0, 0, image.Size.Width, image.Size.Height, GraphicsUnit.Pixel, ia); + + g.Transform = oldTransform; + } + + #endregion + } +} diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index 8e153b10..cf2f3406 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -126,9 +126,9 @@ public ScaleBar() /// This is just the size of the decoration object, border settings are excluded /// /// The graphics object - /// The map + /// The mapviewport /// The size of the map decoration - protected override Size InternalSize(Graphics g, Map map) + protected override Size InternalSize(Graphics g, MapViewport map) { CalcScale((int)g.DpiX); double width = MarginLeft + MarginRight + DefaultWidth; @@ -141,7 +141,7 @@ protected override Size InternalSize(Graphics g, Map map) /// /// /// - protected override void OnRender(Graphics g, Map map) + protected override void OnRender(Graphics g, MapViewport map) { var rectF = g.ClipBounds; diff --git a/UnitTests/MapDecorationTest.cs b/UnitTests/MapDecorationTest.cs index 59dbf84b..c1155000 100644 --- a/UnitTests/MapDecorationTest.cs +++ b/UnitTests/MapDecorationTest.cs @@ -1,84 +1,84 @@ -using System.Collections.Generic; -using System.Drawing; -using GeoAPI.Geometries; -using NUnit.Framework; -using SharpMap; -using SharpMap.Data.Providers; -using SharpMap.Rendering.Decoration; -//using SharpMap.Geometries; -using SharpMap.Rendering.Decoration.ScaleBar; -using SharpMap.Layers; -using GeoPoint = GeoAPI.Geometries.Coordinate; - -namespace UnitTests -{ - public class TestDecoration : MapDecoration - { - protected override Size InternalSize(Graphics g, Map map) - { - return new Size(50, 30); - } - - protected override void OnRender(Graphics g, Map map) - { - g.FillRegion(new SolidBrush(OpacityColor(Color.Red)), g.Clip); - } - } - - public class MapDecorationTest - { - [Test] - public void TestMapDecorationTest() - { - var m = new Map(new Size(780, 540)) {BackColor = Color.White}; - var p = new GeometryProvider(new List()); - var pts = new [] {new GeoPoint(0, 0), new GeoPoint(779, 539)}; - var ls = m.Factory.CreateLineString(pts); - p.Geometries.Add(ls); - m.Layers.Add(new VectorLayer("t",p)); - m.ZoomToExtents(); - - m.Decorations.Add(new TestDecoration - { - Anchor = MapDecorationAnchor.LeftTop, - BorderColor = Color.Green, - BackgroundColor = Color.LightGreen, - BorderWidth = 2, - Location = new Point(10, 10), - BorderMargin = new Size(5, 5), - RoundedEdges = true, - Opacity = 0.6f - }); - - m.Decorations.Add(new TestDecoration - { - Anchor = MapDecorationAnchor.RightTop, - BorderColor = Color.Red, - BackgroundColor = Color.LightCoral, - BorderWidth = 2, - Location = new Point(10, 10), - BorderMargin = new Size(5, 5), - RoundedEdges = true, - Opacity = 0.2f - }); - - m.Decorations.Add(new ScaleBar - { - Anchor = MapDecorationAnchor.Default, - BorderColor = Color.Blue, - BackgroundColor = Color.CornflowerBlue, - BorderWidth = 2, - Location = new Point(10, 10), - BorderMargin = new Size(5, 5), - RoundedEdges = true, - BarWidth = 4, - ScaleText =ScaleBarLabelText.RepresentativeFraction, - NumTicks = 2, - Opacity = 1f - }); - var bmp = m.GetMap(); - bmp.Save("TestMapDecorationTest.bmp"); - } - - } -} \ No newline at end of file +using System.Collections.Generic; +using System.Drawing; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap; +using SharpMap.Data.Providers; +using SharpMap.Rendering.Decoration; +//using SharpMap.Geometries; +using SharpMap.Rendering.Decoration.ScaleBar; +using SharpMap.Layers; +using GeoPoint = GeoAPI.Geometries.Coordinate; + +namespace UnitTests +{ + public class TestDecoration : MapDecoration + { + protected override Size InternalSize(Graphics g, MapViewport map) + { + return new Size(50, 30); + } + + protected override void OnRender(Graphics g, MapViewport map) + { + g.FillRegion(new SolidBrush(OpacityColor(Color.Red)), g.Clip); + } + } + + public class MapDecorationTest + { + [Test] + public void TestMapDecorationTest() + { + var m = new Map(new Size(780, 540)) {BackColor = Color.White}; + var p = new GeometryProvider(new List()); + var pts = new [] {new GeoPoint(0, 0), new GeoPoint(779, 539)}; + var ls = m.Factory.CreateLineString(pts); + p.Geometries.Add(ls); + m.Layers.Add(new VectorLayer("t",p)); + m.ZoomToExtents(); + + m.Decorations.Add(new TestDecoration + { + Anchor = MapDecorationAnchor.LeftTop, + BorderColor = Color.Green, + BackgroundColor = Color.LightGreen, + BorderWidth = 2, + Location = new Point(10, 10), + BorderMargin = new Size(5, 5), + RoundedEdges = true, + Opacity = 0.6f + }); + + m.Decorations.Add(new TestDecoration + { + Anchor = MapDecorationAnchor.RightTop, + BorderColor = Color.Red, + BackgroundColor = Color.LightCoral, + BorderWidth = 2, + Location = new Point(10, 10), + BorderMargin = new Size(5, 5), + RoundedEdges = true, + Opacity = 0.2f + }); + + m.Decorations.Add(new ScaleBar + { + Anchor = MapDecorationAnchor.Default, + BorderColor = Color.Blue, + BackgroundColor = Color.CornflowerBlue, + BorderWidth = 2, + Location = new Point(10, 10), + BorderMargin = new Size(5, 5), + RoundedEdges = true, + BarWidth = 4, + ScaleText =ScaleBarLabelText.RepresentativeFraction, + NumTicks = 2, + Opacity = 1f + }); + var bmp = m.GetMap(); + bmp.Save("TestMapDecorationTest.bmp"); + } + + } +} diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index 8bc6567a..b64e2294 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -1,961 +1,1011 @@ -using System; -using System.Collections.ObjectModel; -using System.Drawing; -using System.Drawing.Imaging; -using System.Reactive.Linq; -using GeoAPI.Geometries; -using Moq; -using NUnit.Framework; -using NetTopologySuite.Geometries; -using NetTopologySuite.IO; -using SharpMap; -using SharpMap.Data.Providers; -using Geometry = GeoAPI.Geometries.IGeometry; -using SharpMap.Layers; -using Point = GeoAPI.Geometries.Coordinate; -using BoundingBox = GeoAPI.Geometries.Envelope; - -namespace UnitTests -{ - [TestFixture] - public class MapTest - { - private static readonly IGeometryFactory Factory = new GeometryFactory(); - private static readonly WKTReader WktReader = new WKTReader(Factory); - - public static IGeometry GeomFromText(string wkt) - { - return WktReader.Read(wkt); - } - - private static IProvider CreateDatasource() - { - var geoms = new Collection - { - GeomFromText("POINT EMPTY"), - GeomFromText( - "GEOMETRYCOLLECTION (POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20))"), - GeomFromText( - "MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))"), - GeomFromText("LINESTRING (20 20, 20 30, 30 30, 30 20, 40 20)"), - GeomFromText( - "MULTILINESTRING ((10 10, 40 50), (20 20, 30 20), (20 20, 50 20, 50 60, 20 20))"), - GeomFromText( - "POLYGON ((20 20, 20 30, 30 30, 30 20, 20 20), (21 21, 29 21, 29 29, 21 29, 21 21), (23 23, 23 27, 27 27, 27 23, 23 23))"), - GeomFromText("POINT (20.564 346.3493254)"), - GeomFromText("MULTIPOINT (20.564 346.3493254, 45 32, 23 54)"), - GeomFromText("MULTIPOLYGON EMPTY"), - GeomFromText("MULTILINESTRING EMPTY"), - GeomFromText("MULTIPOINT EMPTY"), - GeomFromText("LINESTRING EMPTY") - }; - return new GeometryProvider(geoms); - } - - [Test] - public void MapSridEqualsFactorySrid() - { - var m = new Map(); - Assert.AreEqual(m.SRID, m.Factory.SRID); - m.SRID = 10; - Assert.AreEqual(m.SRID, m.Factory.SRID); - } - - [Test] - public void FindLayer_ReturnEnumerable() - { - Map map = new Map(); - map.Layers.Add(new VectorLayer("Layer 1")); - map.Layers.Add(new VectorLayer("Layer 3")); - map.Layers.Add(new VectorLayer("Layer 2")); - map.Layers.Add(new VectorLayer("Layer 4")); - - int count = 0; - foreach (ILayer lay in map.FindLayer("Layer 3")) - { - Assert.AreEqual("Layer 3", lay.LayerName); - count++; - } - Assert.AreEqual(1, count); - } - - [Test] - public void TestClone() - { - Map map = new Map(new Size(2, 1)); - map.Layers.Add(new VectorLayer("Layer 1")); - map.Layers.Add(new VectorLayer("Layer 3")); - map.Layers.Add(new VectorLayer("Layer 2")); - map.Layers.Add(new VectorLayer("Layer 4")); - - var clone = map.Clone(); - - Assert.AreEqual(map.BackgroundLayer.Count, clone.BackgroundLayer.Count); - Assert.AreEqual(map.Layers.Count, clone.Layers.Count); - Assert.AreEqual(map.VariableLayers.Count, clone.VariableLayers.Count); - Assert.AreEqual(map.Decorations.Count, clone.Decorations.Count); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void GetExtents_EmptyMap_ThrowInvalidOperationException() - { - Map map = new Map(new Size(2, 1)); - map.ZoomToExtents(); - } - - [Test] - public void Map_InsertLayer() - { - Map m = new Map(); - VectorLayer vlay1 = new VectorLayer("1"); - m.Layers.Add(vlay1); - VectorLayer vlay2 = new VectorLayer("2"); - m.Layers.Add(vlay2); - - VectorLayer vlay3 = new VectorLayer("3"); - m.Layers.Insert(1, vlay3); - - Assert.AreEqual("1", m.Layers[0].LayerName); - Assert.AreEqual("3", m.Layers[1].LayerName); - Assert.AreEqual("2", m.Layers[2].LayerName); - } - - [Test] - public void Map_GetLayerByNameInGroupLayer() - { - Map m = new Map(); - VectorLayer vlay1 = new VectorLayer("1"); - VectorLayer vlay2 = new VectorLayer("2"); - VectorLayer vlay3 = new VectorLayer("3"); - m.Layers.Add(vlay1); - - LayerGroup lg = new LayerGroup("Group"); - lg.Layers.Add(vlay2); - lg.Layers.Add(vlay3); - m.Layers.Add(lg); - - - var lay = m.GetLayerByName("1"); - Assert.IsNotNull(lay); - Assert.AreEqual("1", lay.LayerName); - lay = m.GetLayerByName("2"); - Assert.IsNotNull(lay); - Assert.AreEqual("2", lay.LayerName); - lay = m.GetLayerByName("3"); - Assert.IsNotNull(lay); - Assert.AreEqual("3", lay.LayerName); - lay = m.GetLayerByName("Group"); - Assert.IsNotNull(lay); - Assert.AreEqual("Group", lay.LayerName); - - } - - [Test] - public void GetExtents_ValidDatasource() - { - Map map = new Map(new Size(400, 200)); - VectorLayer vLayer = new VectorLayer("Geom layer", CreateDatasource()); - map.Layers.Add(vLayer); - BoundingBox box = map.GetExtents(); - Assert.AreEqual(new BoundingBox(0, 50, 0, 346.3493254), box); - } - - [Test] - public void GetLayerByName_Indexer() - { - Map map = new Map(); - map.Layers.Add(new VectorLayer("Layer 1")); - map.Layers.Add(new VectorLayer("Layer 3")); - map.Layers.Add(new VectorLayer("Layer 2")); - - ILayer layer = map.Layers["Layer 2"]; - Assert.IsNotNull(layer); - Assert.AreEqual("Layer 2", layer.LayerName); - } - - [Test] - public void GetLayerByName_ReturnCorrectLayer() - { - Map map = new Map(); - map.Layers.Add(new VectorLayer("Layer 1")); - map.Layers.Add(new VectorLayer("Layer 3")); - map.Layers.Add(new VectorLayer("Layer 2")); - - ILayer layer = map.GetLayerByName("Layer 2"); - Assert.IsNotNull(layer); - Assert.AreEqual("Layer 2", layer.LayerName); - } - - [Test] - public void GetMap_GeometryProvider_ReturnImage() - { - Map map = new Map(new Size(400, 200)); - VectorLayer vLayer = new VectorLayer("Geom layer", CreateDatasource()); - vLayer.Style.Outline = new Pen(Color.Red, 2f); - vLayer.Style.EnableOutline = true; - vLayer.Style.Line = new Pen(Color.Green, 2f); - vLayer.Style.Fill = Brushes.Yellow; - map.Layers.Add(vLayer); - - VectorLayer vLayer2 = new VectorLayer("Geom layer 2", vLayer.DataSource); - vLayer2.Style.SymbolOffset = new PointF(3, 4); - vLayer2.Style.SymbolRotation = 45; - vLayer2.Style.SymbolScale = 0.4f; - map.Layers.Add(vLayer2); - - VectorLayer vLayer3 = new VectorLayer("Geom layer 3", vLayer.DataSource); - vLayer3.Style.SymbolOffset = new PointF(3, 4); - vLayer3.Style.SymbolRotation = 45; - map.Layers.Add(vLayer3); - - VectorLayer vLayer4 = new VectorLayer("Geom layer 4", vLayer.DataSource); - vLayer4.Style.SymbolOffset = new PointF(3, 4); - vLayer4.Style.SymbolScale = 0.4f; - vLayer4.ClippingEnabled = true; - map.Layers.Add(vLayer4); - - map.ZoomToExtents(); - - Image img = map.GetMap(); - Assert.IsNotNull(img); - map.Dispose(); - img.Dispose(); - } - - [Test] - [ExpectedException(typeof(InvalidOperationException))] - public void GetMap_RenderEmptyMap_ThrowInvalidOperationException() - { - Map map = new Map(new Size(2, 1)); - map.GetMap(); - } - - [Test] - //[ExpectedException(typeof (ApplicationException))] - public void GetMap_RenderLayerWithoutDatasource_ThrowException() - { - Map map = new Map(); - map.Layers.Add(new VectorLayer("Layer 1")); - map.GetMap(); - } - - [Test] - public void GetMapHeight_FixedZoom_Return1750() - { - Map map = new Map(new Size(400, 200)); - map.Zoom = 3500; - Assert.AreEqual(1750, map.MapHeight); - } - - [Test] - public void GetPixelSize_FixedZoom_Return8_75() - { - Map map = new Map(new Size(400, 200)); - map.Zoom = 3500; - Assert.AreEqual(8.75, map.PixelSize); - } - - [Test] - public void ImageToWorld() - { - Map map = new Map(new Size(1000, 500)); - map.Zoom = 360; - map.Center = new Point(0, 0); - Assert.AreEqual(new Point(0, 0), map.ImageToWorld(new PointF(500, 250))); - Assert.AreEqual(new Point(-180, 90), map.ImageToWorld(new PointF(0, 0))); - Assert.AreEqual(new Point(-180, -90), map.ImageToWorld(new PointF(0, 500))); - Assert.AreEqual(new Point(180, 90), map.ImageToWorld(new PointF(1000, 0))); - Assert.AreEqual(new Point(180, -90), map.ImageToWorld(new PointF(1000, 500))); - } - - [Test] - public void ImageToWorld_DefaultMap_ReturnValue() - { - Map map = new Map(new Size(500, 200)); - map.Center = new Point(23, 34); - map.Zoom = 1000; - Point p = map.ImageToWorld(new PointF(242.5f, 92)); - Assert.AreEqual(new Point(8, 50), p); - } - - [Test, Category("RequiresWindows")] - public void ImageToWorld_Rotations() - { - // Test applying map transform at 30 degree increments, comparing Image>>World calcs - // with independent Affine Transformation, map Envelope checks, and generate image - ImageToWorld_Rotation(0); - ImageToWorld_Rotation(30); - ImageToWorld_Rotation(60); - ImageToWorld_Rotation(90); - ImageToWorld_Rotation(120); - ImageToWorld_Rotation(150); - ImageToWorld_Rotation(180); - ImageToWorld_Rotation(210); - ImageToWorld_Rotation(240); - ImageToWorld_Rotation(270); - ImageToWorld_Rotation(300); - ImageToWorld_Rotation(330); - //ImageToWorld_Rotation(360); - - ImageToWorld_Rotation(0); - ImageToWorld_Rotation(-30); - ImageToWorld_Rotation(-60); - ImageToWorld_Rotation(-90); - ImageToWorld_Rotation(-120); - ImageToWorld_Rotation(-150); - ImageToWorld_Rotation(-180); - ImageToWorld_Rotation(-210); - ImageToWorld_Rotation(-240); - ImageToWorld_Rotation(-270); - ImageToWorld_Rotation(-300); - ImageToWorld_Rotation(-330); - //ImageToWorld_Rotation(-360); - } - - private void ImageToWorld_Rotation(float deg) - { - var map = new Map(new Size(1000, 500)) { BackColor = System.Drawing.Color.LightSkyBlue }; - map.Zoom = 1000; - map.Center = new Point(25000, 75000); - double mapScale = map.GetMapScale(96); - - double scaleX = 1; - double scaleY = 1; - - System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); - mapTransform.RotateAt(deg, new PointF(map.Size.Width / 2f, map.Size.Height / 2f)); - map.MapTransform = mapTransform; - - var env = map.Envelope; - - // Affine Transformation: - // 1: Translate to mapViewPort centre - // 2: Reflect in X-Axis - // 3: Rotation about mapViewPort centre - // 4: Scale to map units - // 5: Translate to map centre - - //CLOCKWISE affine transform (negate degrees) - //double rad = -1 * deg * Math.PI / 180.0; - //GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = - // new ProjNet.CoordinateSystems.Transformations.AffineTransform( - // scaleX * Math.Cos(rad), - // -scaleX * Math.Sin(rad), - // -scaleX * Math.Cos(rad) * map.Size.Width / 2f + scaleX * Math.Sin(rad) * map.Size.Height / 2f + map.Center.X, - // -scaleY * Math.Sin(rad), - // -scaleY * Math.Cos(rad), - // scaleY * Math.Sin(rad) * map.Size.Width / 2f + scaleY * Math.Cos(rad) * map.Size.Height / 2f + map.Center.Y); - - //ANTICLCOCKWISE affine transform - double rad = deg * Math.PI / 180.0; - GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = - new ProjNet.CoordinateSystems.Transformations.AffineTransform( - scaleX * Math.Cos(rad), - scaleX * Math.Sin(rad), - -scaleX * Math.Cos(rad) * map.Size.Width / 2d - scaleX * Math.Sin(rad) * map.Size.Height / 2d + map.Center.X, - scaleY * Math.Sin(rad), - -scaleY * Math.Cos(rad), - -scaleY * Math.Sin(rad) * map.Size.Width / 2d + scaleY * Math.Cos(rad) * map.Size.Height / 2d + map.Center.Y); - - // image coordindates - var pts = new[] { new Point(map.Size.Width / 2f, map.Size.Height / 2f), // centre - new Point(0, 0), // UL - new Point(map.Size.Width, 0), // UR - new Point(map.Size.Width, map.Size.Height), // LR - new Point(0, map.Size.Height), // LL - new Point(map.Size.Width * 0.05, map.Size.Height * 0.95), // LL inset 5% - new Point(map.Size.Width * 0.95, map.Size.Height * 0.95), // LR inset 5% - new Point(map.Size.Width * 0.95, map.Size.Height * 0.05), // UR inset 5% - new Point(map.Size.Width * 0.05, map.Size.Height * 0.05) // UL inset 5% - }; - - LineString lineString = new LineString(pts); - - NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString(new GeometryFactory(new PrecisionModel()), lineString, trans); - - // .Net Matrix - //System.Drawing.Drawing2D.Matrix matrix; - //matrix = new System.Drawing.Drawing2D.Matrix(); - //matrix.Translate(-map.Size.Width / 2f, -map.Size.Height / 2f); // shift origin to viewport centre - //matrix.Scale(1, -1, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis - //matrix.Rotate(deg, System.Drawing.Drawing2D.MatrixOrder.Append); // rotate about viewport centre - //matrix.Scale((float)scaleX, (float)scaleY, System.Drawing.Drawing2D.MatrixOrder.Append); // scale - //matrix.Translate((float)map.Center.X, (float)map.Center.Y, System.Drawing.Drawing2D.MatrixOrder.Append); // translate to map centre - - //var ptsF = new[] { new PointF(map.Size.Width / 2f, map.Size.Height / 2f), // centre - // new PointF(0, 0), // UL - // new PointF(map.Size.Width, 0), // UR - // new PointF(map.Size.Width, map.Size.Height), // LR - // new PointF(0, map.Size.Height) }; // LL - - //matrix.TransformPoints(ptsF); - - // validate ImageToWorld calcs with independent affine transformation - Assert.IsTrue(lineString.GetPointN(0).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width / 2f, map.Size.Height / 2f), true), 0.001), "Centre: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(1).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, 0), true), 0.001), "Upper Left: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(2).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, 0), true), 0.001), "Upper Right: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(3).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height), true), 0.001), "Lower Right: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(4).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, map.Size.Height), true), 0.001), "Lower Left: " + deg + " deg"); - - // validate map envelope: lineString outline = image extents, so lineString.EnvelopeInternal should equal map.Envelope - // this test found long-standing bug in Map.Envelope calcs - Assert.IsTrue(env.BottomLeft().Equals2D(lineString.EnvelopeInternal.BottomLeft(), 0.1)); - Assert.IsTrue(env.TopLeft().Equals2D(lineString.EnvelopeInternal.TopLeft(), 0.1)); - Assert.IsTrue(env.TopRight().Equals2D(lineString.EnvelopeInternal.TopRight(), 0.1)); - Assert.IsTrue(env.BottomRight().Equals2D(lineString.EnvelopeInternal.BottomRight(), 0.1)); - - // visual checks - var vl = new VectorLayer("Test Points"); - var gp = new GeometryProvider(lineString); - gp.Geometries.Add(new NetTopologySuite.Geometries.Point(25000, 75000)); - vl.DataSource = gp; - var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer(); - cps.CharacterIndex = 221; - cps.Font = new Font("Wingdings", 30); - vl.Style.PointSymbolizer = cps; - map.Layers.Add(vl); - - map.ZoomToBox(lineString.EnvelopeInternal); - - string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.bmp"; - using (var img = map.GetMap(96)) - img.Save(fn,System.Drawing.Imaging.ImageFormat.Bmp); - - map.Dispose(); - } - - [Test] - public void Initalize_MapInstance() - { - Map map = new Map(new Size(2, 1)); - Assert.IsNotNull(map); - Assert.IsNotNull(map.Layers); - Assert.AreEqual(2f, map.Size.Width); - Assert.AreEqual(1f, map.Size.Height); - Assert.AreEqual(Color.Transparent, map.BackColor); - Assert.AreEqual(double.MaxValue, map.MaximumZoom); - Assert.IsTrue(map.MinimumZoom > 0); - Assert.AreEqual(new Point(0, 0), map.Center, "map.Center should be initialized to (0,0)"); - Assert.AreEqual(1, map.Zoom, "Map zoom should be initialized to 1.0"); - } - - [Test] - public void SetMaximumZoom_ValueLessThanMinimumZoom() - { - Map map = new Map(); - map.MaximumZoom = -1; - Assert.IsTrue(map.MaximumZoom >= map.MinimumZoom); - } - - [Test] - public void SetMaximumZoom_OKValue() - { - Map map = new Map(); - map.MaximumZoom = 100.3; - Assert.AreEqual(100.3, map.MaximumZoom); - } - - [Test] - public void SetMinimumZoom_ValueLessThanTwoEpsilon() - { - Map map = new Map(); - map.MinimumZoom = -1; - Assert.IsTrue(map.MinimumZoom > 0); - map.MinimumZoom = Double.Epsilon; - Assert.IsTrue(map.MinimumZoom > Double.Epsilon); - } - - [Test] - public void SetMinimumZoom_OKValue() - { - Map map = new Map(); - map.MinimumZoom = 100.3; - Assert.AreEqual(100.3, map.MinimumZoom); - } - - [Test] - public void SetZoom_ValueBelowMin() - { - Map map = new Map(); - map.MinimumZoom = 100; - map.Zoom = 50; - Assert.AreEqual(100, map.MinimumZoom); - } - - [Test] - public void SetZoom_ValueOutsideMax() - { - Map map = new Map(); - map.MaximumZoom = 100; - map.Zoom = 150; - Assert.AreEqual(100, map.MaximumZoom); - } - - [Test] - public void ZoomToBoxWithEnforcedMaximumExtents() - { - Map map = new Map(); - //map.MaximumZoom = 100; - map.MaximumExtents = new Envelope(-180, 180, -90, 90); - map.EnforceMaximumExtents = true; - map.ZoomToBox(new Envelope(-200, 200, -100, 100)); - Assert.IsTrue(map.MaximumExtents.Contains(map.Envelope)); - Assert.AreEqual(new BoundingBox(-120, 120, -90, 90), map.Envelope); - } - - - - [Test] - public void WorldToImage() - { - Map map = new Map(new Size(1000, 500)); - map.Zoom = 360; - map.Center = new Point(0, 0); - Assert.AreEqual(new PointF(500, 250), map.WorldToImage(new Point(0, 0))); - Assert.AreEqual(new PointF(0, 0), map.WorldToImage(new Point(-180, 90))); - Assert.AreEqual(new PointF(0, 500), map.WorldToImage(new Point(-180, -90))); - Assert.AreEqual(new PointF(1000, 0), map.WorldToImage(new Point(180, 90))); - Assert.AreEqual(new PointF(1000, 500), map.WorldToImage(new Point(180, -90))); - } - - [Test] - public void WorldToMap_DefaultMap_ReturnValue() - { - Map map = new Map(new Size(500, 200)); - map.Center = new Point(23, 34); - map.Zoom = 1000; - PointF p = map.WorldToImage(new Point(8, 50)); - Assert.AreEqual(new PointF(242.5f, 92), p); - } - - [Test] - public void ZoomToBox_NoAspectCorrection() - { - Map map = new Map(new Size(400, 200)); - map.ZoomToBox(new BoundingBox(20, 100, 50, 80)); - Assert.AreEqual(new Point(60, 65), map.Center); - Assert.AreEqual(80, map.Zoom); - } - - [Test] - public void ZoomToBox_WithAspectCorrection() - { - Map map = new Map(new Size(400, 200)); - map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); - Assert.AreEqual(new Point(60, 95), map.Center); - Assert.AreEqual(340, map.Zoom); - } - - [Test] - public void TestZoomToBoxRaisesMapViewOnChange() - { - var raised = false; - var map = new Map(new Size(400, 200)); - map.MapViewOnChange += () => raised = true; - - // ZoomToBox - map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); - Assert.IsTrue(raised, "MapViewOnChange not fired when calling Map.ZoomToBox(...)."); - raised = false; - map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); - Assert.IsFalse(raised, "MapViewOnChange fired when calling Map.ZoomToBox(map.Envelope)."); - - // ZoomToExtents - // Note: Not needed as Map.ZoomToExtents() calls Map.ZoomToBox(Map.GetExtents()) - //raised = false; - //map.ZoomToExtents(); - //Assert.IsTrue(raised, "MapViewOnChange not fired when calling Map.ZoomToExtents()"); - //raised = false; - //map.ZoomToExtents(); - //Assert.IsFalse(raised, "MapViewOnChange fired when calling Map.ZoomToExtents() twice"); - - // Set Zoom - map.Zoom = map.Zoom * 0.9; - Assert.IsTrue(raised, "MapViewOnChange not fired when setting Map.Zoom."); - raised = false; - map.Zoom = map.Zoom; - Assert.IsFalse(raised, "MapViewOnChange not fired when setting Map.Zoom = Map.Zoom"); - - // Set Center - map.Center = new Coordinate(map.Center.X + 1, map.Center.Y); - Assert.IsTrue(raised, "MapViewOnChange not fired when setting Map.Center."); - raised = false; - map.Center = map.Center; - Assert.IsFalse(raised, "MapViewOnChange fired when setting Map.Center = Map.Center."); - - } - - - [TestCase(LayerCollectionType.Background, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to background collection, fires the MapNewTileAvailable event")] - [TestCase(LayerCollectionType.Static, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to static collection, fires the MapNewTileAvailable event")] - public void AddingTileAsyncLayers_HookItsMapNewTileAvaliableEvent(LayerCollectionType collectionType) - { - var map = new Map(); - - var layer = CreateTileAsyncLayer(); - - AddTileLayerToMap(layer, map, collectionType); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - RaiseMapNewtileAvailableOn(layer); - - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event for removed ITileAsyncLayers, case: layer from StaticLayers")] - [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event for removed ITileAsyncLayers, case: layer from BackgroundLayers")] - public void AfterRemovingTileAsyncLayer_MapDoesNotHookAnymoreItsMapNewTileAvailableEvent(LayerCollectionType collectionType) - { - var map = new Map(); - - var tileAsyncLayer = CreateTileAsyncLayer(); - - AddTileLayerToMap(tileAsyncLayer, map, collectionType); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - map.GetCollection(collectionType).RemoveAt(0); - - RaiseMapNewtileAvailableOn(tileAsyncLayer); - - Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event for replaced TileAsyncLayers from Layer collection")] - [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event for replaced TileAsyncLayers from BackgroundLayer collection")] - public void MapDoesNotGenerateMapNewTile_ReplacedLayers(LayerCollectionType collectionType) - { - var map = new Map(); - - var layer = CreateTileAsyncLayer(); - - AddTileLayerToMap(layer, map, collectionType); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - var newLayer = CreateTileAsyncLayer(); - map.GetCollection(collectionType)[0] = newLayer.Item1.Object; - - RaiseMapNewtileAvailableOn(layer); - - Assert.That(eventSource.IsEmpty().First(), Is.EqualTo(true), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "The map should fire MapNewTileAvailable event for new added by replace TileAsyncLayers, case: Layer")] - [TestCase(LayerCollectionType.Background, Description = "The map should fire MapNewTileAvailable event for new added by replace TileAsyncLayers, case: BackgroundLayer")] - public void MapGeneratesMapNewTile_NewReplacedLayers(LayerCollectionType collectionType) - { - var map = new Map(); - - var tileAsyncLayer = CreateTileAsyncLayer(); - - AddTileLayerToMap(tileAsyncLayer, map, collectionType); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - var newLayer = CreateTileAsyncLayer(); - map.GetCollection(collectionType)[0] = newLayer.Item1.Object; - - RaiseMapNewtileAvailableOn(newLayer); - - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event after the Layers are cleared from Layers collection")] - [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event after the Layers are cleared from Background collection")] - public void MapDoesNoGenerateMapNewTile_AfterClear(LayerCollectionType collectionType) - { - var map = new Map(); - - var tileAsyncLayer = CreateTileAsyncLayer(); - - AddTileLayerToMap(tileAsyncLayer, map, collectionType); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - map.GetCollection(collectionType).Clear(); - - RaiseMapNewtileAvailableOn(tileAsyncLayer); - - Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside of a LayerGroup, case Layer")] - [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside of a LayerGroup, case BackgroundLayer")] - public void Map_TileAsyncInsideGroup_FiresMapNewtileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var tileLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileLayer, group); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - RaiseMapNewtileAvailableOn(tileLayer); - - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should NOT fire MapNewtileAvailable event for TileAsyncLayers removed from a group belonging to Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should NOT fire MapNewtileAvailable event for TileAsyncLayers removed from a group belonging to BackgroundLayers")] - public void Map_TileAsyncRemovedFromGroup_DoesNotFiredMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var tileLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileLayer, group); - - RemoveTileLayerFromGroup(group, tileLayer); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - - RaiseMapNewtileAvailableOn(tileLayer); - Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for new TileAsyncLayer replaced from a group and not for the old layer, case: Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for new TileAsyncLayer replaced from a group and not for the old layer, case: BackgroundLayers")] - public void Map_TileAsyncReplacedFromGroup_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var tileLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileLayer, group); - - var newTileLayer = CreateTileAsyncLayer(); - ReplaceExistingAsyncLayerFromGroup(group, tileLayer, newTileLayer); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileLayer); - - Assert.That(eventSource.IsEmpty().First(), - "Map should NOT fire MapNewTileAvailable event for TileAsyncLayers replaced from a group"); - - RaiseMapNewtileAvailableOn(newTileLayer); - - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayer belonging to a group that has been cleared, case: Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayer belonging to a group that has been cleared, case: BackgroundLayers")] - public void Map_TileAsyncFromClearedGroup_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var tileLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileLayer, group); - - group.Layers.Clear(); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileLayer); - - Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers belonging to an added group, case Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers belonging to an added group, case BackgroundLayers")] - public void Map_TileAsyncInsideAddedGroup_FiresMapNewTileAvail(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - var tileLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileLayer, group); - - map.GetCollection(collectionType).Add(group); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileLayer); - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside nested group, case Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside nested group, case BackgroundLayers")] - public void Map_TilAsyncInsideNephew_FiresMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var subGroup = CreateLayerGroup("subgroup"); - - var tileAsyncLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileAsyncLayer, subGroup); - - group.Layers.Add(subGroup); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileAsyncLayer); - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewtileAvailable event for TileAsyncLayers removed from a nested group, case Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewtileAvailable event for TileAsyncLayers removed from a nested group, case BackgroundLayers")] - public void Map_TileAsyncRemovedFromNephew_DoesNotFireMapNewtileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var subGroup = CreateLayerGroup("subgroup"); - - var tileAsyncLayer = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileAsyncLayer, subGroup); - - group.Layers.Add(subGroup); - - // test - RemoveTileLayerFromGroup(subGroup, tileAsyncLayer); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileAsyncLayer); - Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers belonging to a group collection replaced, case Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers belonging to a group collection replaced, case BackgroundLayers")] - public void Map_TileAsyncInsideReplacedCollection_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var tileAsync = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileAsync, group); - - group.Layers = new ObservableCollection(); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileAsync); - Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers added to a new replaced collection, case Layers")] - [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers added to a new replaced collection, case BackgroundLayers")] - public void Map_TileAsyncAddedToReplacedCollection_FiresMapNewtileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - group.Layers = new ObservableCollection(); - - var tileAsync = CreateTileAsyncLayer(); - AddTileLayerToLayerGroup(tileAsync, group); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileAsync); - Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); - } - - [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers added to detached collections, case BackgroundLayers")] - public void Map_TileAsyncAddedToDetachedCollection_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) - { - var map = new Map(); - - var group = CreateLayerGroup(); - map.GetCollection(collectionType).Add(group); - - var detachedCollection = group.Layers; - - group.Layers = new ObservableCollection(); - - var tileAsync = CreateTileAsyncLayer(); - detachedCollection.Add(tileAsync.Item1.Object); - - var eventSource = map.GetMapNewTileAvailableAsObservable(); - RaiseMapNewtileAvailableOn(tileAsync); - Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); - } - - [Test(Description = "Removing a non empty group from layers empties the collection")] - public void MapLayers_AfterRemovingNotEmptyGroup_IsEmpty() - { - var map = new Map(); - - var group = CreateLayerGroup(); - group.Layers.Add(new LabelLayer("labels")); - - map.Layers.Add(group); - - map.Layers.Remove(group); - - Assert.That(map.Layers, Is.Empty); - } - - [Test(Description = "The cloning should clone also the LayerGroups")] - public void Clone_ShoulCloneTheGroups() - { - // LayerGroups must be cloned because we want that each instance of the map listens to only the notification events of its children. - - var map = new Map(); - - var group = CreateLayerGroup(); - - map.Layers.Add(group); - - var clonedMap = map.Clone(); - - Assert.That(clonedMap.Layers[0], Is.Not.EqualTo(group), TestContext.CurrentContext.Test.GetDescription()); - } - - private Tuple, Mock> CreateTileAsyncLayer() - { - var tileAsync = new Mock(); - tileAsync.SetupAllProperties(); - var layer = tileAsync.As(); - layer.SetupAllProperties(); - - return new Tuple, Mock>(layer, tileAsync); - } - private void ReplaceExistingAsyncLayerFromGroup(LayerGroup group, Tuple, Mock> oldTileLayer, - Tuple, Mock> newTileLayer) - { - var oldLayer = oldTileLayer.Item1.Object; - var idx = group.Layers.IndexOf(oldLayer); - group.Layers[idx] = newTileLayer.Item1.Object; - } - private void RemoveTileLayerFromGroup(LayerGroup group, Tuple, Mock> tileLayer) - { - group.Layers.Remove(tileLayer.Item1.Object); - } - private void AddTileLayerToLayerGroup(Tuple, Mock> tileLayer, LayerGroup group) - { - group.Layers.Add(tileLayer.Item1.Object); - } - private void AddTileLayerToMap(Tuple, Mock> tileLayer, Map map, LayerCollectionType collectionType = LayerCollectionType.Background) - { - var layer = tileLayer.Item1.Object; - - map.GetCollection(collectionType).Add(layer); - } - private LayerGroup CreateLayerGroup(string layerName = "group") - { - return new LayerGroup(layerName); - } - private void RaiseMapNewtileAvailableOn(Tuple, Mock> tileAsync) - { - tileAsync.Item2.Raise(tal => tal.MapNewTileAvaliable += null, (TileLayer)null, (Envelope)null, (Bitmap)null, 0, - 0, (ImageAttributes)null); - } - } -} +using System; +using System.Collections.ObjectModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.Reactive.Linq; +using GeoAPI.Geometries; +using Moq; +using NUnit.Framework; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO; +using SharpMap; +using SharpMap.Data.Providers; +using Geometry = GeoAPI.Geometries.IGeometry; +using SharpMap.Layers; +using Point = GeoAPI.Geometries.Coordinate; +using BoundingBox = GeoAPI.Geometries.Envelope; + +namespace UnitTests +{ + [TestFixture] + public class MapTest + { + private static readonly IGeometryFactory Factory = new GeometryFactory(); + private static readonly WKTReader WktReader = new WKTReader(Factory); + + public static IGeometry GeomFromText(string wkt) + { + return WktReader.Read(wkt); + } + + private static IProvider CreateDatasource() + { + var geoms = new Collection + { + GeomFromText("POINT EMPTY"), + GeomFromText( + "GEOMETRYCOLLECTION (POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20))"), + GeomFromText( + "MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))"), + GeomFromText("LINESTRING (20 20, 20 30, 30 30, 30 20, 40 20)"), + GeomFromText( + "MULTILINESTRING ((10 10, 40 50), (20 20, 30 20), (20 20, 50 20, 50 60, 20 20))"), + GeomFromText( + "POLYGON ((20 20, 20 30, 30 30, 30 20, 20 20), (21 21, 29 21, 29 29, 21 29, 21 21), (23 23, 23 27, 27 27, 27 23, 23 23))"), + GeomFromText("POINT (20.564 346.3493254)"), + GeomFromText("MULTIPOINT (20.564 346.3493254, 45 32, 23 54)"), + GeomFromText("MULTIPOLYGON EMPTY"), + GeomFromText("MULTILINESTRING EMPTY"), + GeomFromText("MULTIPOINT EMPTY"), + GeomFromText("LINESTRING EMPTY") + }; + return new GeometryProvider(geoms); + } + + [Test] + public void MapSridEqualsFactorySrid() + { + var m = new Map(); + Assert.AreEqual(m.SRID, m.Factory.SRID); + m.SRID = 10; + Assert.AreEqual(m.SRID, m.Factory.SRID); + } + + [Test] + public void FindLayer_ReturnEnumerable() + { + Map map = new Map(); + map.Layers.Add(new VectorLayer("Layer 1")); + map.Layers.Add(new VectorLayer("Layer 3")); + map.Layers.Add(new VectorLayer("Layer 2")); + map.Layers.Add(new VectorLayer("Layer 4")); + + int count = 0; + foreach (ILayer lay in map.FindLayer("Layer 3")) + { + Assert.AreEqual("Layer 3", lay.LayerName); + count++; + } + Assert.AreEqual(1, count); + } + + [Test] + public void TestClone() + { + Map map = new Map(new Size(2, 1)); + map.Layers.Add(new VectorLayer("Layer 1")); + map.Layers.Add(new VectorLayer("Layer 3")); + map.Layers.Add(new VectorLayer("Layer 2")); + map.Layers.Add(new VectorLayer("Layer 4")); + + var clone = map.Clone(); + + Assert.AreEqual(map.BackgroundLayer.Count, clone.BackgroundLayer.Count); + Assert.AreEqual(map.Layers.Count, clone.Layers.Count); + Assert.AreEqual(map.VariableLayers.Count, clone.VariableLayers.Count); + Assert.AreEqual(map.Decorations.Count, clone.Decorations.Count); + } + + [Test] + [ExpectedException(typeof(InvalidOperationException))] + public void GetExtents_EmptyMap_ThrowInvalidOperationException() + { + Map map = new Map(new Size(2, 1)); + map.ZoomToExtents(); + } + + [Test] + public void Map_InsertLayer() + { + Map m = new Map(); + VectorLayer vlay1 = new VectorLayer("1"); + m.Layers.Add(vlay1); + VectorLayer vlay2 = new VectorLayer("2"); + m.Layers.Add(vlay2); + + VectorLayer vlay3 = new VectorLayer("3"); + m.Layers.Insert(1, vlay3); + + Assert.AreEqual("1", m.Layers[0].LayerName); + Assert.AreEqual("3", m.Layers[1].LayerName); + Assert.AreEqual("2", m.Layers[2].LayerName); + } + + [Test] + public void Map_GetLayerByNameInGroupLayer() + { + Map m = new Map(); + VectorLayer vlay1 = new VectorLayer("1"); + VectorLayer vlay2 = new VectorLayer("2"); + VectorLayer vlay3 = new VectorLayer("3"); + m.Layers.Add(vlay1); + + LayerGroup lg = new LayerGroup("Group"); + lg.Layers.Add(vlay2); + lg.Layers.Add(vlay3); + m.Layers.Add(lg); + + + var lay = m.GetLayerByName("1"); + Assert.IsNotNull(lay); + Assert.AreEqual("1", lay.LayerName); + lay = m.GetLayerByName("2"); + Assert.IsNotNull(lay); + Assert.AreEqual("2", lay.LayerName); + lay = m.GetLayerByName("3"); + Assert.IsNotNull(lay); + Assert.AreEqual("3", lay.LayerName); + lay = m.GetLayerByName("Group"); + Assert.IsNotNull(lay); + Assert.AreEqual("Group", lay.LayerName); + + } + + [Test] + public void GetExtents_ValidDatasource() + { + Map map = new Map(new Size(400, 200)); + VectorLayer vLayer = new VectorLayer("Geom layer", CreateDatasource()); + map.Layers.Add(vLayer); + BoundingBox box = map.GetExtents(); + Assert.AreEqual(new BoundingBox(0, 50, 0, 346.3493254), box); + } + + [Test] + public void GetLayerByName_Indexer() + { + Map map = new Map(); + map.Layers.Add(new VectorLayer("Layer 1")); + map.Layers.Add(new VectorLayer("Layer 3")); + map.Layers.Add(new VectorLayer("Layer 2")); + + ILayer layer = map.Layers["Layer 2"]; + Assert.IsNotNull(layer); + Assert.AreEqual("Layer 2", layer.LayerName); + } + + [Test] + public void GetLayerByName_ReturnCorrectLayer() + { + Map map = new Map(); + map.Layers.Add(new VectorLayer("Layer 1")); + map.Layers.Add(new VectorLayer("Layer 3")); + map.Layers.Add(new VectorLayer("Layer 2")); + + ILayer layer = map.GetLayerByName("Layer 2"); + Assert.IsNotNull(layer); + Assert.AreEqual("Layer 2", layer.LayerName); + } + + [Test] + public void GetMap_GeometryProvider_ReturnImage() + { + Map map = new Map(new Size(400, 200)); + VectorLayer vLayer = new VectorLayer("Geom layer", CreateDatasource()); + vLayer.Style.Outline = new Pen(Color.Red, 2f); + vLayer.Style.EnableOutline = true; + vLayer.Style.Line = new Pen(Color.Green, 2f); + vLayer.Style.Fill = Brushes.Yellow; + map.Layers.Add(vLayer); + + VectorLayer vLayer2 = new VectorLayer("Geom layer 2", vLayer.DataSource); + vLayer2.Style.SymbolOffset = new PointF(3, 4); + vLayer2.Style.SymbolRotation = 45; + vLayer2.Style.SymbolScale = 0.4f; + map.Layers.Add(vLayer2); + + VectorLayer vLayer3 = new VectorLayer("Geom layer 3", vLayer.DataSource); + vLayer3.Style.SymbolOffset = new PointF(3, 4); + vLayer3.Style.SymbolRotation = 45; + map.Layers.Add(vLayer3); + + VectorLayer vLayer4 = new VectorLayer("Geom layer 4", vLayer.DataSource); + vLayer4.Style.SymbolOffset = new PointF(3, 4); + vLayer4.Style.SymbolScale = 0.4f; + vLayer4.ClippingEnabled = true; + map.Layers.Add(vLayer4); + + map.ZoomToExtents(); + + Image img = map.GetMap(); + Assert.IsNotNull(img); + map.Dispose(); + img.Dispose(); + } + + [Test] + [ExpectedException(typeof(InvalidOperationException))] + public void GetMap_RenderEmptyMap_ThrowInvalidOperationException() + { + Map map = new Map(new Size(2, 1)); + map.GetMap(); + } + + [Test] + //[ExpectedException(typeof (ApplicationException))] + public void GetMap_RenderLayerWithoutDatasource_ThrowException() + { + Map map = new Map(); + map.Layers.Add(new VectorLayer("Layer 1")); + map.GetMap(); + } + + [Test] + public void GetMapHeight_FixedZoom_Return1750() + { + Map map = new Map(new Size(400, 200)); + map.Zoom = 3500; + Assert.AreEqual(1750, map.MapHeight); + } + + [Test] + public void GetPixelSize_FixedZoom_Return8_75() + { + Map map = new Map(new Size(400, 200)); + map.Zoom = 3500; + Assert.AreEqual(8.75, map.PixelSize); + } + + [Test] + public void ImageToWorld() + { + Map map = new Map(new Size(1000, 500)); + map.Zoom = 360; + map.Center = new Point(0, 0); + Assert.AreEqual(new Point(0, 0), map.ImageToWorld(new PointF(500, 250))); + Assert.AreEqual(new Point(-180, 90), map.ImageToWorld(new PointF(0, 0))); + Assert.AreEqual(new Point(-180, -90), map.ImageToWorld(new PointF(0, 500))); + Assert.AreEqual(new Point(180, 90), map.ImageToWorld(new PointF(1000, 0))); + Assert.AreEqual(new Point(180, -90), map.ImageToWorld(new PointF(1000, 500))); + } + + [Test] + public void ImageToWorld_DefaultMap_ReturnValue() + { + Map map = new Map(new Size(500, 200)); + map.Center = new Point(23, 34); + map.Zoom = 1000; + Point p = map.ImageToWorld(new PointF(242.5f, 92)); + Assert.AreEqual(new Point(8, 50), p); + } + + [Test, Category("RequiresWindows")] + public void ImageToWorld_Rotations() + { + // Test applying map transform at 30 degree increments, comparing Image>>World calcs + // with independent Affine Transformation, map Envelope checks, and generate image + ImageToWorld_Rotation(0); + ImageToWorld_Rotation(30); + ImageToWorld_Rotation(60); + ImageToWorld_Rotation(90); + ImageToWorld_Rotation(120); + ImageToWorld_Rotation(150); + ImageToWorld_Rotation(180); + ImageToWorld_Rotation(210); + ImageToWorld_Rotation(240); + ImageToWorld_Rotation(270); + ImageToWorld_Rotation(300); + ImageToWorld_Rotation(330); + //ImageToWorld_Rotation(360); + + ImageToWorld_Rotation(0); + ImageToWorld_Rotation(-30); + ImageToWorld_Rotation(-60); + ImageToWorld_Rotation(-90); + ImageToWorld_Rotation(-120); + ImageToWorld_Rotation(-150); + ImageToWorld_Rotation(-180); + ImageToWorld_Rotation(-210); + ImageToWorld_Rotation(-240); + ImageToWorld_Rotation(-270); + ImageToWorld_Rotation(-300); + ImageToWorld_Rotation(-330); + //ImageToWorld_Rotation(-360); + } + + private void ImageToWorld_Rotation(float deg) + { + var map = new Map(new Size(1000, 500)) { BackColor = System.Drawing.Color.LightSkyBlue }; + map.Zoom = 1000; + map.Center = new Point(25000, 75000); + double mapScale = map.GetMapScale(96); + + double scaleX = 1; + double scaleY = 1; + + System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); + mapTransform.RotateAt(deg, new PointF(map.Size.Width / 2f, map.Size.Height / 2f)); + map.MapTransform = mapTransform; + + var env = map.Envelope; + + // Affine Transformation: + // 1: Translate to mapViewPort centre + // 2: Reflect in X-Axis + // 3: Rotation about mapViewPort centre + // 4: Scale to map units + // 5: Translate to map centre + + //CLOCKWISE affine transform (negate degrees) + //double rad = -1 * deg * Math.PI / 180.0; + //GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = + // new ProjNet.CoordinateSystems.Transformations.AffineTransform( + // scaleX * Math.Cos(rad), + // -scaleX * Math.Sin(rad), + // -scaleX * Math.Cos(rad) * map.Size.Width / 2f + scaleX * Math.Sin(rad) * map.Size.Height / 2f + map.Center.X, + // -scaleY * Math.Sin(rad), + // -scaleY * Math.Cos(rad), + // scaleY * Math.Sin(rad) * map.Size.Width / 2f + scaleY * Math.Cos(rad) * map.Size.Height / 2f + map.Center.Y); + + //ANTICLCOCKWISE affine transform + double rad = deg * Math.PI / 180.0; + GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = + new ProjNet.CoordinateSystems.Transformations.AffineTransform( + scaleX * Math.Cos(rad), + scaleX * Math.Sin(rad), + -scaleX * Math.Cos(rad) * map.Size.Width / 2d - scaleX * Math.Sin(rad) * map.Size.Height / 2d + map.Center.X, + scaleY * Math.Sin(rad), + -scaleY * Math.Cos(rad), + -scaleY * Math.Sin(rad) * map.Size.Width / 2d + scaleY * Math.Cos(rad) * map.Size.Height / 2d + map.Center.Y); + + // image coordindates + var pts = new[] { new Point(map.Size.Width / 2f, map.Size.Height / 2f), // centre + new Point(0, 0), // UL + new Point(map.Size.Width, 0), // UR + new Point(map.Size.Width, map.Size.Height), // LR + new Point(0, map.Size.Height), // LL + new Point(map.Size.Width * 0.05, map.Size.Height * 0.95), // LL inset 5% + new Point(map.Size.Width * 0.95, map.Size.Height * 0.95), // LR inset 5% + new Point(map.Size.Width * 0.95, map.Size.Height * 0.05), // UR inset 5% + new Point(map.Size.Width * 0.05, map.Size.Height * 0.05) // UL inset 5% + }; + + LineString lineString = new LineString(pts); + + NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString(new GeometryFactory(new PrecisionModel()), lineString, trans); + + // .Net Matrix + //System.Drawing.Drawing2D.Matrix matrix; + //matrix = new System.Drawing.Drawing2D.Matrix(); + //matrix.Translate(-map.Size.Width / 2f, -map.Size.Height / 2f); // shift origin to viewport centre + //matrix.Scale(1, -1, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis + //matrix.Rotate(deg, System.Drawing.Drawing2D.MatrixOrder.Append); // rotate about viewport centre + //matrix.Scale((float)scaleX, (float)scaleY, System.Drawing.Drawing2D.MatrixOrder.Append); // scale + //matrix.Translate((float)map.Center.X, (float)map.Center.Y, System.Drawing.Drawing2D.MatrixOrder.Append); // translate to map centre + + //var ptsF = new[] { new PointF(map.Size.Width / 2f, map.Size.Height / 2f), // centre + // new PointF(0, 0), // UL + // new PointF(map.Size.Width, 0), // UR + // new PointF(map.Size.Width, map.Size.Height), // LR + // new PointF(0, map.Size.Height) }; // LL + + //matrix.TransformPoints(ptsF); + + // validate ImageToWorld calcs with independent affine transformation + Assert.IsTrue(lineString.GetPointN(0).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width / 2f, map.Size.Height / 2f), true), 0.001), "Centre: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(1).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, 0), true), 0.001), "Upper Left: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(2).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, 0), true), 0.001), "Upper Right: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(3).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height), true), 0.001), "Lower Right: " + deg + " deg"); + Assert.IsTrue(lineString.GetPointN(4).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, map.Size.Height), true), 0.001), "Lower Left: " + deg + " deg"); + + // validate map envelope: lineString outline = image extents, so lineString.EnvelopeInternal should equal map.Envelope + // this test found long-standing bug in Map.Envelope calcs + Assert.IsTrue(env.BottomLeft().Equals2D(lineString.EnvelopeInternal.BottomLeft(), 0.1)); + Assert.IsTrue(env.TopLeft().Equals2D(lineString.EnvelopeInternal.TopLeft(), 0.1)); + Assert.IsTrue(env.TopRight().Equals2D(lineString.EnvelopeInternal.TopRight(), 0.1)); + Assert.IsTrue(env.BottomRight().Equals2D(lineString.EnvelopeInternal.BottomRight(), 0.1)); + + // visual checks + var vl = new VectorLayer("Test Points"); + var gp = new GeometryProvider(lineString); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(25000, 75000)); + vl.DataSource = gp; + var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer(); + cps.CharacterIndex = 221; + cps.Font = new Font("Wingdings", 30); + vl.Style.PointSymbolizer = cps; + map.Layers.Add(vl); + + map.ZoomToBox(lineString.EnvelopeInternal); + + string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.bmp"; + using (var img = map.GetMap(96)) + img.Save(fn,System.Drawing.Imaging.ImageFormat.Bmp); + + map.Dispose(); + } + + [Test] + public void Initalize_MapInstance() + { + Map map = new Map(new Size(2, 1)); + Assert.IsNotNull(map); + Assert.IsNotNull(map.Layers); + Assert.AreEqual(2f, map.Size.Width); + Assert.AreEqual(1f, map.Size.Height); + Assert.AreEqual(Color.Transparent, map.BackColor); + Assert.AreEqual(double.MaxValue, map.MaximumZoom); + Assert.IsTrue(map.MinimumZoom > 0); + Assert.AreEqual(new Point(0, 0), map.Center, "map.Center should be initialized to (0,0)"); + Assert.AreEqual(1, map.Zoom, "Map zoom should be initialized to 1.0"); + } + + [Test] + public void SetMaximumZoom_ValueLessThanMinimumZoom() + { + Map map = new Map(); + map.MaximumZoom = -1; + Assert.IsTrue(map.MaximumZoom >= map.MinimumZoom); + } + + [Test] + public void SetMaximumZoom_OKValue() + { + Map map = new Map(); + map.MaximumZoom = 100.3; + Assert.AreEqual(100.3, map.MaximumZoom); + } + + [Test] + public void SetMinimumZoom_ValueLessThanTwoEpsilon() + { + Map map = new Map(); + map.MinimumZoom = -1; + Assert.IsTrue(map.MinimumZoom > 0); + map.MinimumZoom = Double.Epsilon; + Assert.IsTrue(map.MinimumZoom > Double.Epsilon); + } + + [Test] + public void SetMinimumZoom_OKValue() + { + Map map = new Map(); + map.MinimumZoom = 100.3; + Assert.AreEqual(100.3, map.MinimumZoom); + } + + [Test] + public void SetZoom_ValueBelowMin() + { + Map map = new Map(); + map.MinimumZoom = 100; + map.Zoom = 50; + Assert.AreEqual(100, map.MinimumZoom); + } + + [Test] + public void SetZoom_ValueOutsideMax() + { + Map map = new Map(); + map.MaximumZoom = 100; + map.Zoom = 150; + Assert.AreEqual(100, map.MaximumZoom); + } + + [Test] + public void ZoomToBoxWithEnforcedMaximumExtents() + { + Map map = new Map(); + //map.MaximumZoom = 100; + map.MaximumExtents = new Envelope(-180, 180, -90, 90); + map.EnforceMaximumExtents = true; + map.ZoomToBox(new Envelope(-200, 200, -100, 100)); + Assert.IsTrue(map.MaximumExtents.Contains(map.Envelope)); + Assert.AreEqual(new BoundingBox(-120, 120, -90, 90), map.Envelope); + } + + + + [Test] + public void WorldToImage() + { + Map map = new Map(new Size(1000, 500)); + map.Zoom = 360; + map.Center = new Point(0, 0); + Assert.AreEqual(new PointF(500, 250), map.WorldToImage(new Point(0, 0))); + Assert.AreEqual(new PointF(0, 0), map.WorldToImage(new Point(-180, 90))); + Assert.AreEqual(new PointF(0, 500), map.WorldToImage(new Point(-180, -90))); + Assert.AreEqual(new PointF(1000, 0), map.WorldToImage(new Point(180, 90))); + Assert.AreEqual(new PointF(1000, 500), map.WorldToImage(new Point(180, -90))); + } + + [Test] + public void WorldToMap_DefaultMap_ReturnValue() + { + Map map = new Map(new Size(500, 200)); + map.Center = new Point(23, 34); + map.Zoom = 1000; + PointF p = map.WorldToImage(new Point(8, 50)); + Assert.AreEqual(new PointF(242.5f, 92), p); + } + + [Test] + public void ZoomToBox_NoAspectCorrection() + { + Map map = new Map(new Size(400, 200)); + map.ZoomToBox(new BoundingBox(20, 100, 50, 80)); + Assert.AreEqual(new Point(60, 65), map.Center); + Assert.AreEqual(80, map.Zoom); + } + + [Test] + public void ZoomToBox_WithAspectCorrection() + { + Map map = new Map(new Size(400, 200)); + map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); + Assert.AreEqual(new Point(60, 95), map.Center); + Assert.AreEqual(340, map.Zoom); + } + + [TestCase(500, 100, 10000, 10000)] + public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, double boxWidth, + double boxHeight) + { + // Ensure that map extents contain envelope + Map map = new Map(new Size(mapSizeWidth, mapSizeHeight)); + map.BackColor= Color.Azure; + + var env = new Envelope(0, boxWidth, 0, boxHeight); + env.Translate(700000 - boxHeight * 0.5, 1000000 - boxHeight * 0.5); + + var vl = new VectorLayer("Test Points"); + var gp = new GeometryProvider(env.ToPolygon()); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(env.Centre)); + var llIndicator = new Coordinate(env.BottomLeft()); + llIndicator.X += 100; + llIndicator.Y += 100; + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(llIndicator)); + vl.DataSource = gp; + map.Layers.Add(vl); + + for (var degrees = 0; degrees <= 360; degrees += 30) + { + var mapTransform = new System.Drawing.Drawing2D.Matrix(); + mapTransform.RotateAt(degrees, new PointF(map.Size.Width / 2, map.Size.Height / 2)); + map.MapTransform = mapTransform; + + // reset view + map.Center = new Coordinate(0, 0); + map.Zoom = 1000; + + map.ZoomToBox(env); + var fn = + $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_old.png"; + using (var img = map.GetMap(96)) + img.Save(fn, System.Drawing.Imaging.ImageFormat.Bmp); + + // reset view + map.Center = new Coordinate(0, 0); + map.Zoom = 1000; + +// map.ZoomToBox(env, true); +// fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_new.png"; +// using (var img = map.GetMap(96)) +// img.Save(fn, System.Drawing.Imaging.ImageFormat.Bmp); + } + + map.Dispose(); + } + + [Test] + public void TestZoomToBoxRaisesMapViewOnChange() + { + var raised = false; + var map = new Map(new Size(400, 200)); + map.MapViewOnChange += () => raised = true; + + // ZoomToBox + map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); + Assert.IsTrue(raised, "MapViewOnChange not fired when calling Map.ZoomToBox(...)."); + raised = false; + map.ZoomToBox(new BoundingBox(20, 100, 10, 180)); + Assert.IsFalse(raised, "MapViewOnChange fired when calling Map.ZoomToBox(map.Envelope)."); + + // ZoomToExtents + // Note: Not needed as Map.ZoomToExtents() calls Map.ZoomToBox(Map.GetExtents()) + //raised = false; + //map.ZoomToExtents(); + //Assert.IsTrue(raised, "MapViewOnChange not fired when calling Map.ZoomToExtents()"); + //raised = false; + //map.ZoomToExtents(); + //Assert.IsFalse(raised, "MapViewOnChange fired when calling Map.ZoomToExtents() twice"); + + // Set Zoom + map.Zoom = map.Zoom * 0.9; + Assert.IsTrue(raised, "MapViewOnChange not fired when setting Map.Zoom."); + raised = false; + map.Zoom = map.Zoom; + Assert.IsFalse(raised, "MapViewOnChange not fired when setting Map.Zoom = Map.Zoom"); + + // Set Center + map.Center = new Coordinate(map.Center.X + 1, map.Center.Y); + Assert.IsTrue(raised, "MapViewOnChange not fired when setting Map.Center."); + raised = false; + map.Center = map.Center; + Assert.IsFalse(raised, "MapViewOnChange fired when setting Map.Center = Map.Center."); + + } + + + [TestCase(LayerCollectionType.Background, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to background collection, fires the MapNewTileAvailable event")] + [TestCase(LayerCollectionType.Static, Description = "The map fires MapNewTileAvailable event when an ITileAsyncLayer added to static collection, fires the MapNewTileAvailable event")] + public void AddingTileAsyncLayers_HookItsMapNewTileAvaliableEvent(LayerCollectionType collectionType) + { + var map = new Map(); + + var layer = CreateTileAsyncLayer(); + + AddTileLayerToMap(layer, map, collectionType); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + RaiseMapNewtileAvailableOn(layer); + + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event for removed ITileAsyncLayers, case: layer from StaticLayers")] + [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event for removed ITileAsyncLayers, case: layer from BackgroundLayers")] + public void AfterRemovingTileAsyncLayer_MapDoesNotHookAnymoreItsMapNewTileAvailableEvent(LayerCollectionType collectionType) + { + var map = new Map(); + + var tileAsyncLayer = CreateTileAsyncLayer(); + + AddTileLayerToMap(tileAsyncLayer, map, collectionType); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + map.GetCollection(collectionType).RemoveAt(0); + + RaiseMapNewtileAvailableOn(tileAsyncLayer); + + Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event for replaced TileAsyncLayers from Layer collection")] + [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event for replaced TileAsyncLayers from BackgroundLayer collection")] + public void MapDoesNotGenerateMapNewTile_ReplacedLayers(LayerCollectionType collectionType) + { + var map = new Map(); + + var layer = CreateTileAsyncLayer(); + + AddTileLayerToMap(layer, map, collectionType); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + var newLayer = CreateTileAsyncLayer(); + map.GetCollection(collectionType)[0] = newLayer.Item1.Object; + + RaiseMapNewtileAvailableOn(layer); + + Assert.That(eventSource.IsEmpty().First(), Is.EqualTo(true), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "The map should fire MapNewTileAvailable event for new added by replace TileAsyncLayers, case: Layer")] + [TestCase(LayerCollectionType.Background, Description = "The map should fire MapNewTileAvailable event for new added by replace TileAsyncLayers, case: BackgroundLayer")] + public void MapGeneratesMapNewTile_NewReplacedLayers(LayerCollectionType collectionType) + { + var map = new Map(); + + var tileAsyncLayer = CreateTileAsyncLayer(); + + AddTileLayerToMap(tileAsyncLayer, map, collectionType); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + var newLayer = CreateTileAsyncLayer(); + map.GetCollection(collectionType)[0] = newLayer.Item1.Object; + + RaiseMapNewtileAvailableOn(newLayer); + + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "The map should not fire MapNewTileAvailable event after the Layers are cleared from Layers collection")] + [TestCase(LayerCollectionType.Background, Description = "The map should not fire MapNewTileAvailable event after the Layers are cleared from Background collection")] + public void MapDoesNoGenerateMapNewTile_AfterClear(LayerCollectionType collectionType) + { + var map = new Map(); + + var tileAsyncLayer = CreateTileAsyncLayer(); + + AddTileLayerToMap(tileAsyncLayer, map, collectionType); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + map.GetCollection(collectionType).Clear(); + + RaiseMapNewtileAvailableOn(tileAsyncLayer); + + Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside of a LayerGroup, case Layer")] + [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside of a LayerGroup, case BackgroundLayer")] + public void Map_TileAsyncInsideGroup_FiresMapNewtileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var tileLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileLayer, group); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + RaiseMapNewtileAvailableOn(tileLayer); + + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should NOT fire MapNewtileAvailable event for TileAsyncLayers removed from a group belonging to Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should NOT fire MapNewtileAvailable event for TileAsyncLayers removed from a group belonging to BackgroundLayers")] + public void Map_TileAsyncRemovedFromGroup_DoesNotFiredMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var tileLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileLayer, group); + + RemoveTileLayerFromGroup(group, tileLayer); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + + RaiseMapNewtileAvailableOn(tileLayer); + Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for new TileAsyncLayer replaced from a group and not for the old layer, case: Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for new TileAsyncLayer replaced from a group and not for the old layer, case: BackgroundLayers")] + public void Map_TileAsyncReplacedFromGroup_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var tileLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileLayer, group); + + var newTileLayer = CreateTileAsyncLayer(); + ReplaceExistingAsyncLayerFromGroup(group, tileLayer, newTileLayer); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileLayer); + + Assert.That(eventSource.IsEmpty().First(), + "Map should NOT fire MapNewTileAvailable event for TileAsyncLayers replaced from a group"); + + RaiseMapNewtileAvailableOn(newTileLayer); + + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayer belonging to a group that has been cleared, case: Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayer belonging to a group that has been cleared, case: BackgroundLayers")] + public void Map_TileAsyncFromClearedGroup_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var tileLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileLayer, group); + + group.Layers.Clear(); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileLayer); + + Assert.That(eventSource.IsEmpty().First(), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers belonging to an added group, case Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers belonging to an added group, case BackgroundLayers")] + public void Map_TileAsyncInsideAddedGroup_FiresMapNewTileAvail(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + var tileLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileLayer, group); + + map.GetCollection(collectionType).Add(group); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileLayer); + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside nested group, case Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewtileAvailable event for TileAsyncLayers contained inside nested group, case BackgroundLayers")] + public void Map_TilAsyncInsideNephew_FiresMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var subGroup = CreateLayerGroup("subgroup"); + + var tileAsyncLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileAsyncLayer, subGroup); + + group.Layers.Add(subGroup); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileAsyncLayer); + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewtileAvailable event for TileAsyncLayers removed from a nested group, case Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewtileAvailable event for TileAsyncLayers removed from a nested group, case BackgroundLayers")] + public void Map_TileAsyncRemovedFromNephew_DoesNotFireMapNewtileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var subGroup = CreateLayerGroup("subgroup"); + + var tileAsyncLayer = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileAsyncLayer, subGroup); + + group.Layers.Add(subGroup); + + // test + RemoveTileLayerFromGroup(subGroup, tileAsyncLayer); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileAsyncLayer); + Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers belonging to a group collection replaced, case Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers belonging to a group collection replaced, case BackgroundLayers")] + public void Map_TileAsyncInsideReplacedCollection_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var tileAsync = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileAsync, group); + + group.Layers = new ObservableCollection(); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileAsync); + Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Static, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers added to a new replaced collection, case Layers")] + [TestCase(LayerCollectionType.Background, Description = "Map should fire MapNewTileAvailable event for TileAsyncLayers added to a new replaced collection, case BackgroundLayers")] + public void Map_TileAsyncAddedToReplacedCollection_FiresMapNewtileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + group.Layers = new ObservableCollection(); + + var tileAsync = CreateTileAsyncLayer(); + AddTileLayerToLayerGroup(tileAsync, group); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileAsync); + Assert.That(eventSource.Count().First(), Is.EqualTo(1), TestContext.CurrentContext.Test.GetDescription()); + } + + [TestCase(LayerCollectionType.Background, Description = "Map should not fire MapNewTileAvailable event for TileAsyncLayers added to detached collections, case BackgroundLayers")] + public void Map_TileAsyncAddedToDetachedCollection_DoesNotFireMapNewTileAvailable(LayerCollectionType collectionType) + { + var map = new Map(); + + var group = CreateLayerGroup(); + map.GetCollection(collectionType).Add(group); + + var detachedCollection = group.Layers; + + group.Layers = new ObservableCollection(); + + var tileAsync = CreateTileAsyncLayer(); + detachedCollection.Add(tileAsync.Item1.Object); + + var eventSource = map.GetMapNewTileAvailableAsObservable(); + RaiseMapNewtileAvailableOn(tileAsync); + Assert.That(eventSource.Count().First(), Is.EqualTo(0), TestContext.CurrentContext.Test.GetDescription()); + } + + [Test(Description = "Removing a non empty group from layers empties the collection")] + public void MapLayers_AfterRemovingNotEmptyGroup_IsEmpty() + { + var map = new Map(); + + var group = CreateLayerGroup(); + group.Layers.Add(new LabelLayer("labels")); + + map.Layers.Add(group); + + map.Layers.Remove(group); + + Assert.That(map.Layers, Is.Empty); + } + + [Test(Description = "The cloning should clone also the LayerGroups")] + public void Clone_ShoulCloneTheGroups() + { + // LayerGroups must be cloned because we want that each instance of the map listens to only the notification events of its children. + + var map = new Map(); + + var group = CreateLayerGroup(); + + map.Layers.Add(group); + + var clonedMap = map.Clone(); + + Assert.That(clonedMap.Layers[0], Is.Not.EqualTo(group), TestContext.CurrentContext.Test.GetDescription()); + } + + private Tuple, Mock> CreateTileAsyncLayer() + { + var tileAsync = new Mock(); + tileAsync.SetupAllProperties(); + var layer = tileAsync.As(); + layer.SetupAllProperties(); + + return new Tuple, Mock>(layer, tileAsync); + } + private void ReplaceExistingAsyncLayerFromGroup(LayerGroup group, Tuple, Mock> oldTileLayer, + Tuple, Mock> newTileLayer) + { + var oldLayer = oldTileLayer.Item1.Object; + var idx = group.Layers.IndexOf(oldLayer); + group.Layers[idx] = newTileLayer.Item1.Object; + } + private void RemoveTileLayerFromGroup(LayerGroup group, Tuple, Mock> tileLayer) + { + group.Layers.Remove(tileLayer.Item1.Object); + } + private void AddTileLayerToLayerGroup(Tuple, Mock> tileLayer, LayerGroup group) + { + group.Layers.Add(tileLayer.Item1.Object); + } + private void AddTileLayerToMap(Tuple, Mock> tileLayer, Map map, LayerCollectionType collectionType = LayerCollectionType.Background) + { + var layer = tileLayer.Item1.Object; + + map.GetCollection(collectionType).Add(layer); + } + private LayerGroup CreateLayerGroup(string layerName = "group") + { + return new LayerGroup(layerName); + } + private void RaiseMapNewtileAvailableOn(Tuple, Mock> tileAsync) + { + tileAsync.Item2.Raise(tal => tal.MapNewTileAvaliable += null, (TileLayer)null, (Envelope)null, (Bitmap)null, 0, + 0, (ImageAttributes)null); + } + } +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 186543ce..9d0e7991 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -60,15 +60,15 @@ --> - + ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll True - + ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.Desktop.dll True - + ..\packages\BruTile.Desktop.0.18.1\lib\net40\BruTile.MbTiles.dll True @@ -128,8 +128,9 @@ - + ..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net451\System.Data.SQLite.dll + True @@ -365,8 +366,10 @@ Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + + \ No newline at end of file diff --git a/UnitTests/packages.config b/UnitTests/packages.config index d48db458..09cd388b 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -1,27 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From f1eccd9717b8a3f890a1c8684080e59394ef501b Mon Sep 17 00:00:00 2001 From: Tim C Date: Fri, 28 Jun 2019 19:07:22 +0700 Subject: [PATCH 088/186] Update image output in all UnitTests to use common directory with namespace sub-dir to help relate images to tests and vice versa --- UnitTests/Data/Providers/DbTests.cs | 366 ++-- UnitTests/Data/Providers/KmlProviderTests.cs | 104 +- .../Data/Providers/SQLServer2008Tests.cs | 1487 +++++++++-------- .../Data/Providers/ShapeFileProviderTests.cs | 582 +++---- .../Layers/CoordinateTransformationTest.cs | 6 +- UnitTests/Layers/LabelLayerTest.cs | 180 +- UnitTests/Layers/TileLayerIssues.cs | 86 +- UnitTests/MapDecorationTest.cs | 5 +- UnitTests/MapTest.cs | 8 +- .../Decoration/ScaleBar/ScaleBarTests.cs | 32 +- .../Rendering/GroupStyle/GroupStyleTests.cs | 33 +- .../Symbolizer/LineSymbolizerTest.cs | 470 +++--- .../Symbolizer/PointSymbolizerTest.cs | 352 ++-- .../Symbolizer/PolygonSymbolizerTest.cs | 160 +- .../Symbolizer/RasterPointSymbolizerTest.cs | 2 +- UnitTests/Serialization/MapTest.cs | 260 +-- UnitTests/TestData/CreatingData.cs | 380 ++--- UnitTests/UnitTestsFixture.cs | 81 +- 18 files changed, 2300 insertions(+), 2294 deletions(-) diff --git a/UnitTests/Data/Providers/DbTests.cs b/UnitTests/Data/Providers/DbTests.cs index 121d9fb5..4ee07669 100644 --- a/UnitTests/Data/Providers/DbTests.cs +++ b/UnitTests/Data/Providers/DbTests.cs @@ -1,184 +1,182 @@ -namespace UnitTests.Data.Providers -{ - [NUnit.Framework.TestFixture] - public abstract class DbTests where TProvider : SharpMap.Data.Providers.SpatialDbProvider - { - [NUnit.Framework.TestFixtureSetUp] - public void FixtureSetUp() - { - try - { - using (var cn = GetOpenConnection()) - { - cn.Close(); - } - } - catch (System.Exception) - { - throw new NUnit.Framework.IgnoreException("Provider cound not be instantiated!"); - } - } - - protected abstract System.Data.Common.DbConnection GetOpenConnection(); - protected TProvider GetProvider() - { - try - { - return GetProviderInternal(); - } - catch (System.Exception) - { - throw new NUnit.Framework.IgnoreException("Provider cound not be instantiated!"); - } - } - protected abstract TProvider GetProviderInternal(); - - protected string TestTable; - protected string TestOidColumn; - protected string TestGeometryColumn; - - [NUnit.Framework.Test] - public void Test01EstablishConnection() - { - using (var conn = GetOpenConnection()) - { - NUnit.Framework.Assert.IsTrue(conn.State == System.Data.ConnectionState.Open); - } - } - - [NUnit.Framework.Test] - public void Test02CreateProvider() - { - using (var provider = GetProvider()) - { - NUnit.Framework.Assert.IsNotNull(provider, "Creation of provider failed"); - NUnit.Framework.Assert.AreEqual(provider.ConnectionID, Properties.Settings.Default.MsSqlSpatial, "ConnectionID is not correct"); - NUnit.Framework.Assert.IsTrue(provider.SRID >= 0); - } - } - - [NUnit.Framework.Test] - public void Test03GetFeatureCount() - { - using (var provider = GetProvider()) - { - var fc = provider.GetFeatureCount(); - NUnit.Framework.Assert.IsNotNull(fc > 0); - } - } - - [NUnit.Framework.Test] - public void Test04GetExtents() - { - using (var provider = GetProvider()) - { - var extent = provider.GetExtents(); - NUnit.Framework.Assert.IsNotNull(extent); - NUnit.Framework.Assert.IsFalse(extent.IsNull); - } - } - - [NUnit.Framework.Test] - public void Test05GetOidInView() - { - using (var provider = GetProvider()) - { - var extent = provider.GetExtents(); - var oids = provider.GetObjectIDsInView(extent); - NUnit.Framework.Assert.IsNotNull(oids); - NUnit.Framework.Assert.AreEqual(provider.GetFeatureCount(), oids.Count); - } - } - - [NUnit.Framework.Test] - public void Test06GetGeometriesInView() - { - using (var provider = GetProvider()) - { - var extent = provider.GetExtents(); - var geoms = provider.GetGeometriesInView(extent); - NUnit.Framework.Assert.IsNotNull(geoms); - NUnit.Framework.Assert.AreEqual(provider.GetFeatureCount(), geoms.Count); - } - } - - [NUnit.Framework.Test] - public void Test07GetGeometryByID() - { - using (var provider = GetProvider()) - { - GeoAPI.Geometries.IGeometry result = null; - NUnit.Framework.Assert.DoesNotThrow( () => result = provider.GetGeometryByID(1)); - NUnit.Framework.Assert.IsNotNull(result); - } - } - - [NUnit.Framework.Test] - public void Test09ExecuteIntersectionQuery() - { - using (var provider = GetProvider()) - { - var ext = provider.GetExtents(); - ext.ExpandBy(-0.25*ext.Width, -0.25*ext.Height); - - var fds = new SharpMap.Data.FeatureDataSet(); - NUnit.Framework.Assert.DoesNotThrow(() => provider.ExecuteIntersectionQuery(ext, fds)); - NUnit.Framework.Assert.Greater(fds.Tables.Count, 0); - NUnit.Framework.Assert.Greater(fds.Tables[0].Count, 0); - NUnit.Framework.Assert.Less(fds.Tables[0].Count, provider.GetFeatureCount()); - } - } - [NUnit.Framework.Test] - public void Test10ExecuteIntersectionQuery() - { - using (var provider = GetProvider()) - { - var ext = provider.GetExtents(); - ext.ExpandBy(-0.25 * ext.Width, -0.25 * ext.Height); - - var geom = provider.Factory.ToGeometry(ext); - var fds = new SharpMap.Data.FeatureDataSet(); - NUnit.Framework.Assert.DoesNotThrow(() => provider.ExecuteIntersectionQuery(geom, fds)); - NUnit.Framework.Assert.Greater(fds.Tables.Count, 0); - NUnit.Framework.Assert.Greater(fds.Tables[0].Count, 0); - NUnit.Framework.Assert.Less(fds.Tables[0].Count, provider.GetFeatureCount()); - } - } - - [NUnit.Framework.Test] - public void Test11GetFeature() - { - using (var provider = GetProvider()) - { - SharpMap.Data.FeatureDataRow feature = null; - NUnit.Framework.Assert.DoesNotThrow(()=> feature = provider.GetFeature(5)); - NUnit.Framework.Assert.NotNull(feature); - NUnit.Framework.Assert.AreEqual(5, feature[provider.ObjectIdColumn]); - } - } - - [NUnit.Framework.Test] - public void Test99GetMap() - { - - var m = new SharpMap.Map(new System.Drawing.Size(512, 1048)); - var p = GetProvider(); - //p.SRID = 4326; - //p.TargetSRID = 25832; - var l = new SharpMap.Layers.VectorLayer("SpDb", p); - m.Layers.Add(l); - m.ZoomToExtents(); - var i = m.GetMap(); - var path = System.IO.Path.Combine( - System.IO.Directory.GetCurrentDirectory(), - string.Format("SpatialDbProvider_{0}.png", ImplementationName)); - i.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Diagnostics.Trace.WriteLine(new System.Uri(path).LocalPath); - } - - /// - /// Gets the name of the test implementation - /// - public abstract string ImplementationName { get; } - } -} +namespace UnitTests.Data.Providers +{ + [NUnit.Framework.TestFixture] + public abstract class DbTests where TProvider : SharpMap.Data.Providers.SpatialDbProvider + { + [NUnit.Framework.TestFixtureSetUp] + public void FixtureSetUp() + { + try + { + using (var cn = GetOpenConnection()) + { + cn.Close(); + } + } + catch (System.Exception) + { + throw new NUnit.Framework.IgnoreException("Provider cound not be instantiated!"); + } + } + + protected abstract System.Data.Common.DbConnection GetOpenConnection(); + protected TProvider GetProvider() + { + try + { + return GetProviderInternal(); + } + catch (System.Exception) + { + throw new NUnit.Framework.IgnoreException("Provider cound not be instantiated!"); + } + } + protected abstract TProvider GetProviderInternal(); + + protected string TestTable; + protected string TestOidColumn; + protected string TestGeometryColumn; + + [NUnit.Framework.Test] + public void Test01EstablishConnection() + { + using (var conn = GetOpenConnection()) + { + NUnit.Framework.Assert.IsTrue(conn.State == System.Data.ConnectionState.Open); + } + } + + [NUnit.Framework.Test] + public void Test02CreateProvider() + { + using (var provider = GetProvider()) + { + NUnit.Framework.Assert.IsNotNull(provider, "Creation of provider failed"); + NUnit.Framework.Assert.AreEqual(provider.ConnectionID, Properties.Settings.Default.MsSqlSpatial, "ConnectionID is not correct"); + NUnit.Framework.Assert.IsTrue(provider.SRID >= 0); + } + } + + [NUnit.Framework.Test] + public void Test03GetFeatureCount() + { + using (var provider = GetProvider()) + { + var fc = provider.GetFeatureCount(); + NUnit.Framework.Assert.IsNotNull(fc > 0); + } + } + + [NUnit.Framework.Test] + public void Test04GetExtents() + { + using (var provider = GetProvider()) + { + var extent = provider.GetExtents(); + NUnit.Framework.Assert.IsNotNull(extent); + NUnit.Framework.Assert.IsFalse(extent.IsNull); + } + } + + [NUnit.Framework.Test] + public void Test05GetOidInView() + { + using (var provider = GetProvider()) + { + var extent = provider.GetExtents(); + var oids = provider.GetObjectIDsInView(extent); + NUnit.Framework.Assert.IsNotNull(oids); + NUnit.Framework.Assert.AreEqual(provider.GetFeatureCount(), oids.Count); + } + } + + [NUnit.Framework.Test] + public void Test06GetGeometriesInView() + { + using (var provider = GetProvider()) + { + var extent = provider.GetExtents(); + var geoms = provider.GetGeometriesInView(extent); + NUnit.Framework.Assert.IsNotNull(geoms); + NUnit.Framework.Assert.AreEqual(provider.GetFeatureCount(), geoms.Count); + } + } + + [NUnit.Framework.Test] + public void Test07GetGeometryByID() + { + using (var provider = GetProvider()) + { + GeoAPI.Geometries.IGeometry result = null; + NUnit.Framework.Assert.DoesNotThrow( () => result = provider.GetGeometryByID(1)); + NUnit.Framework.Assert.IsNotNull(result); + } + } + + [NUnit.Framework.Test] + public void Test09ExecuteIntersectionQuery() + { + using (var provider = GetProvider()) + { + var ext = provider.GetExtents(); + ext.ExpandBy(-0.25*ext.Width, -0.25*ext.Height); + + var fds = new SharpMap.Data.FeatureDataSet(); + NUnit.Framework.Assert.DoesNotThrow(() => provider.ExecuteIntersectionQuery(ext, fds)); + NUnit.Framework.Assert.Greater(fds.Tables.Count, 0); + NUnit.Framework.Assert.Greater(fds.Tables[0].Count, 0); + NUnit.Framework.Assert.Less(fds.Tables[0].Count, provider.GetFeatureCount()); + } + } + [NUnit.Framework.Test] + public void Test10ExecuteIntersectionQuery() + { + using (var provider = GetProvider()) + { + var ext = provider.GetExtents(); + ext.ExpandBy(-0.25 * ext.Width, -0.25 * ext.Height); + + var geom = provider.Factory.ToGeometry(ext); + var fds = new SharpMap.Data.FeatureDataSet(); + NUnit.Framework.Assert.DoesNotThrow(() => provider.ExecuteIntersectionQuery(geom, fds)); + NUnit.Framework.Assert.Greater(fds.Tables.Count, 0); + NUnit.Framework.Assert.Greater(fds.Tables[0].Count, 0); + NUnit.Framework.Assert.Less(fds.Tables[0].Count, provider.GetFeatureCount()); + } + } + + [NUnit.Framework.Test] + public void Test11GetFeature() + { + using (var provider = GetProvider()) + { + SharpMap.Data.FeatureDataRow feature = null; + NUnit.Framework.Assert.DoesNotThrow(()=> feature = provider.GetFeature(5)); + NUnit.Framework.Assert.NotNull(feature); + NUnit.Framework.Assert.AreEqual(5, feature[provider.ObjectIdColumn]); + } + } + + [NUnit.Framework.Test] + public void Test99GetMap() + { + var m = new SharpMap.Map(new System.Drawing.Size(512, 1048)); + var p = GetProvider(); + //p.SRID = 4326; + //p.TargetSRID = 25832; + var l = new SharpMap.Layers.VectorLayer("SpDb", p); + m.Layers.Add(l); + m.ZoomToExtents(); + + var path = System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), $"SpatialDbProvider_{ImplementationName}.png"); + using (var i = m.GetMap()) + i.Save(path, System.Drawing.Imaging.ImageFormat.Png); + System.Diagnostics.Trace.WriteLine(new System.Uri(path).LocalPath); + } + + /// + /// Gets the name of the test implementation + /// + public abstract string ImplementationName { get; } + } +} diff --git a/UnitTests/Data/Providers/KmlProviderTests.cs b/UnitTests/Data/Providers/KmlProviderTests.cs index a92cd678..aa29169a 100644 --- a/UnitTests/Data/Providers/KmlProviderTests.cs +++ b/UnitTests/Data/Providers/KmlProviderTests.cs @@ -1,53 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Imaging; -using System.Linq; -using System.Text; -using NUnit.Framework; -using SharpMap; -using SharpMap.Data.Providers; -using SharpMap.Layers; - -namespace UnitTests.Data.Providers -{ - [TestFixture] - public class KmlProviderTests - { - [TestFixtureSetUp] - public void SetUp() - { - GeoAPI.GeometryServiceProvider.Instance = NetTopologySuite.NtsGeometryServices.Instance; - } - - [Test] - public void TestConstruction() - { - KmlProvider p = null; - Assert.DoesNotThrow(() => p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml"))); - - Assert.IsNotNull(p); - Assert.IsTrue(p.ConnectionID.StartsWith("KML Samples")); - } - - [Test] - public void TestGetMap() - { - var m = new Map(new Size(500, 300)); - m.BackColor = Color.White; - - var p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml")); - var l = new VectorLayer(p.ConnectionID, p); - l.Theme = p.GetKmlTheme(); - - m.Layers.Add(l); - m.ZoomToExtents(); - m.Zoom *= 1.1; - - var img = m.GetMap(); - img.Save("KmlProviderImage.png", ImageFormat.Png); - - - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.Linq; +using System.Text; +using NUnit.Framework; +using SharpMap; +using SharpMap.Data.Providers; +using SharpMap.Layers; + +namespace UnitTests.Data.Providers +{ + [TestFixture] + public class KmlProviderTests + { + [TestFixtureSetUp] + public void SetUp() + { + GeoAPI.GeometryServiceProvider.Instance = NetTopologySuite.NtsGeometryServices.Instance; + } + + [Test] + public void TestConstruction() + { + KmlProvider p = null; + Assert.DoesNotThrow(() => p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml"))); + + Assert.IsNotNull(p); + Assert.IsTrue(p.ConnectionID.StartsWith("KML Samples")); + } + + [Test] + public void TestGetMap() + { + var m = new Map(new Size(500, 300)); + m.BackColor = Color.White; + + var p = KmlProvider.FromKml(System.IO.Path.Combine("TestData", "KML_Samples.kml")); + var l = new VectorLayer(p.ConnectionID, p); + l.Theme = p.GetKmlTheme(); + + m.Layers.Add(l); + m.ZoomToExtents(); + m.Zoom *= 1.1; + + using (var img = m.GetMap()) + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "KmlProviderImage.png"), ImageFormat.Png); + } + } +} diff --git a/UnitTests/Data/Providers/SQLServer2008Tests.cs b/UnitTests/Data/Providers/SQLServer2008Tests.cs index 467f3987..b9dc67df 100644 --- a/UnitTests/Data/Providers/SQLServer2008Tests.cs +++ b/UnitTests/Data/Providers/SQLServer2008Tests.cs @@ -1,743 +1,744 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using System.Data.SqlClient; -using System.Collections.ObjectModel; -using System.IO; -using SharpMap.Data.Providers; - -namespace UnitTests.Data.Providers -{ - [NUnit.Framework.TestFixture] - public class SQLServer2008Tests - { - [TestFixtureSetUp] - public void SetupFixture() - { - GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - } - - [NUnit.Framework.TestCase("[sde].[gisadmin.di]", "sde", "gisadmin.di")] - [NUnit.Framework.TestCase("[sde.gisadmin].[di]", "sde.gisadmin", "di")] - [NUnit.Framework.TestCase("sde.gisadmin.di", "sde.gisadmin", "di")] - public void VerifySchemaDetection(string schemaTable, string tableSchema, string table) - { - SharpMap.Data.Providers.SqlServer2008 sq = new SharpMap.Data.Providers.SqlServer2008("", schemaTable, "oidcolumn"); - Assert.AreEqual(tableSchema, sq.TableSchema); - Assert.AreEqual(table, sq.Table); - Assert.AreEqual("oidcolumn", sq.ObjectIdColumn); - - System.Reflection.PropertyInfo pi = sq.GetType().GetProperty("QualifiedTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty); - string qualifiedTable = (string)pi.GetValue(sq, null); - Assert.IsTrue(qualifiedTable.Contains(tableSchema)); - Assert.IsTrue(qualifiedTable.Contains(table)); - } - } - - [NUnit.Framework.TestFixture] - public class SQLServer2008DbTests - { - // IGNORE: - // 1) see SetupFixture where all SQLServer2008DbTests will be ignored if a valid SqlServer connection string is not supplied - // 2) see GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) where all - // tests involving SqlServer2008Ex provider can be skipped - // NUM RECORDS: - // see SetupFixture: indexes = indexes.Take(100); may be commented out to use all shapefile records - - public enum SqlServerProviderMode - { - WellKnownBinary, - NativeSqlBytes - } - - private const int GeographySrid = 4326; // Geography types MUST have a valid spatial reference - private int _geometrySrid = 0; - private const string GeometrySpatialIndex = "IX_roads_ugl_GEOM"; - private const string GeographySpatialIndex = "IX_roads_ugl_GEOG"; - - private int _numValidGeoms; // number of valid spatial features - private int _numInvalidGeoms; // number of invalid spatial features - private int _numValidatedGeoms; // number of spatial featuress = _numValidGeoms + Validated(_numInvalidGeoms) - private int _numFeatures; // number of records - private uint _idNullGeom; - private uint _idEmptyGeom; - private uint _idInvalidGeom; - - private string GetTestFile() - { - return Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); - } - private string GetPathToTestDataDir() - { - return Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); - } - - [TestFixtureSetUp] - public void SetupFixture() - { - SqlConnectionStringBuilder connStrBuilder = new SqlConnectionStringBuilder(UnitTests.Properties.Settings.Default.SqlServer2008); - if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) - { - Assert.Ignore("Requires SQL Server connectionstring"); - } - - GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); - - // Set up sample tables (Geometry + Geography) - using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) - { - conn.Open(); - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = "CREATE TABLE roads_ugl_geom(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; - cmd.ExecuteNonQuery(); - } - - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = "CREATE TABLE roads_ugl_geog(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOG geography)"; - cmd.ExecuteNonQuery(); - } - - // Load data - using (SharpMap.Data.Providers.ShapeFile shapeFile = new SharpMap.Data.Providers.ShapeFile(GetTestFile())) - { - shapeFile.Open(); - _geometrySrid = shapeFile.SRID; - - IEnumerable indexes = shapeFile.GetObjectIDsInView(shapeFile.GetExtents()); - - // Note that spatial indexes may only kick in at certain number of records - // so for thorough testing comment out next line and load all features (approx 3500) - indexes = indexes.Take(100); - - var cmdGeom = new SqlCommand("INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))", conn); - var cmdGeog = new SqlCommand("INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES (@Name, geography::STGeomFromText(@Geog, @Srid))", conn); - - foreach (uint idx in indexes) - { - SharpMap.Data.FeatureDataRow feature = shapeFile.GetFeature(idx); - - string wkt; - - if (feature.Geometry == null || feature.Geometry.IsEmpty) - wkt = "LINESTRING EMPTY"; - else - wkt = feature.Geometry.AsText(); - - if (cmdGeom.Parameters.Count == 0) - { - cmdGeom.Parameters.AddWithValue("@Geom", wkt); - cmdGeom.Parameters.AddWithValue("@Name", feature["NAME"]); - cmdGeom.Parameters.AddWithValue("@Srid", _geometrySrid); - } - else - { - cmdGeom.Parameters[0].Value = wkt; - cmdGeom.Parameters[1].Value = feature["NAME"]; - } - cmdGeom.ExecuteNonQuery(); - - if (cmdGeog.Parameters.Count == 0) - { - cmdGeog.Parameters.AddWithValue("@Geog", wkt); - cmdGeog.Parameters.AddWithValue("@Name", feature["NAME"]); - cmdGeog.Parameters.AddWithValue("@Srid", GeographySrid); - } - else - { - cmdGeog.Parameters[0].Value = wkt; - cmdGeog.Parameters[1].Value = feature["NAME"]; - } - cmdGeog.ExecuteNonQuery(); - } - - cmdGeom.Dispose(); - cmdGeog.Dispose(); - } - - // ensure we have some features with NULL and EMPTY geometries - using (var cmd = conn.CreateCommand()) - { - // To find invalid geometries: - // SELECT {OidColumn}, {GeometryColumn}.STIsValid() AS STIsValid, {GeometryColumn}.IsValidDetailed() AS IsValidDetailed FROM {QualifiedTableName} - - // NULL - cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test null wkt', NULL)"; - cmd.ExecuteNonQuery(); - - cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test null wkt', NULL)"; - cmd.ExecuteNonQuery(); - - // EMPTY - cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; - cmd.ExecuteNonQuery(); - - cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; - cmd.ExecuteNonQuery(); - - // INVALID (ID 144 from shape file; see also ID 2055) - cmd.CommandText = $"INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test invalid wkt', geometry::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {_geometrySrid}))"; - cmd.ExecuteNonQuery(); - - cmd.CommandText = $"INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test invalid wkt', geography::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {GeographySrid}))"; - cmd.ExecuteNonQuery(); - } - - // Create GEOM spatial index - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = $"CREATE SPATIAL INDEX [{GeometrySpatialIndex}] ON [dbo].[roads_ugl_geom](GEOM) USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; - cmd.CommandTimeout = 300; - cmd.ExecuteNonQuery(); - } - - // Create GEOG spatial index - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = $"CREATE SPATIAL INDEX [{GeographySpatialIndex}] ON [dbo].[roads_ugl_geog](GEOG)"; - cmd.CommandTimeout = 300; - cmd.ExecuteNonQuery(); - - } - - // initialise counts and test IDs - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 1"; - _numValidGeoms = (int)cmd.ExecuteScalar(); - - cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE GEOM IS NOT NULL AND Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 0"; - _numInvalidGeoms = (int)cmd.ExecuteScalar(); - - _numValidatedGeoms = _numValidGeoms + _numInvalidGeoms; - - cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom"; - _numFeatures = (int)cmd.ExecuteScalar(); - - _idNullGeom = (uint)(_numFeatures - 2); - _idEmptyGeom = (uint)(_numFeatures - 1); - _idInvalidGeom = (uint)(_numFeatures); - } - - } - } - - [TestFixtureTearDown] - public void TearDownTestFixture() - { - SqlConnectionStringBuilder connStrBuilder = new SqlConnectionStringBuilder(UnitTests.Properties.Settings.Default.SqlServer2008); - if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) - { - return; - } - - // Drop sample tables - using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) - { - conn.Open(); - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = "DROP TABLE roads_ugl_geom"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "DROP TABLE roads_ugl_geog"; - cmd.ExecuteNonQuery(); - } - } - } - - private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialObjectType spatialType) - { - return GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); - } - - private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SqlServer2008 provider; - - switch (providerMode) - { - case SqlServerProviderMode.NativeSqlBytes: - Assert.Ignore("Ignore SharpMap.Data.Providers.SqlSErver2008Ex"); - - if (spatialType == SqlServerSpatialObjectType.Geography) - // NB note forcing WGS84 - provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); - else - provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); - break; - - default: - if (spatialType == SqlServerSpatialObjectType.Geography) - // NB note forcing WGS84 - provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); - else - provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, - "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); - break; - } - - //provider.ValidateGeometries = true - //provider.DefinitionQuery = "ID NOT IN (103)" // Invalid Geom - - return provider; - } - - /// - /// Get the envelope of the entire roads_ugl file - /// - private GeoAPI.Geometries.Envelope GetTestEnvelope(SqlServerSpatialObjectType spatialType) - { - var env = SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse("POLYGON ((-97.23724071609665 41.698023105763589, -82.424263624596563 41.698023105763589, -82.424263624596563 49.000629000758515, -97.23724071609665 49.000629000758515, -97.23724071609665 41.698023105763589))").EnvelopeInternal; - if (spatialType == SqlServerSpatialObjectType.Geography) - // Geography works with boundaries on the spheroid (not rectilinear), so enlarge to ensure we get all features - env.ExpandBy(0.2); - return env; - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetExtentsQueryIndividualFeatures(SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - - sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures; - GeoAPI.Geometries.Envelope extents = sq.GetExtents(); - - Assert.IsNotNull(extents); - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetExtentsSpatialIndex(SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - - if (spatialType == SqlServerSpatialObjectType.Geography) - { - var ex = Assert.Throws(() => - { - sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; - }); - } - else - { - sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; - GeoAPI.Geometries.Envelope extents = sq.GetExtents(); - - Assert.IsNotNull(extents); - } - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - [ExpectedException(typeof(ArgumentOutOfRangeException))] - public void TestSqlServer2008ExProviderOverridesValidateGeometries(SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider( SqlServerProviderMode.NativeSqlBytes, spatialType); - sq.ValidateGeometries = false; - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialType) - { - using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) - { - conn.Open(); - using (SqlCommand cmd = conn.CreateCommand()) - { - cmd.CommandText = "SELECT SERVERPROPERTY('productversion')"; - string productversion = (string)cmd.ExecuteScalar(); - if (Version.Parse(productversion).Major < 11) - { - Assert.Ignore("Requires SQL Server 2012 connection"); - } - } - } - - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - - sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.EnvelopeAggregate; - GeoAPI.Geometries.Envelope extents = sq.GetExtents(); - - Assert.IsNotNull(extents); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInView(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - sq.ValidateGeometries = validateGeometries; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - - Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] - public void TestGetGeometriesInViewDefinitionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.DefinitionQuery = "NAME LIKE 'A%'"; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - Assert.LessOrEqual(geometries.Count, _numValidGeoms); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInViewNOLOCK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.NoLockHint = true; - sq.ValidateGeometries = validateGeometries; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); - - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInViewFORCESEEK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.ForceSeekHint = true; - sq.ValidateGeometries = validateGeometries; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - // NOTE ValidateGeometries is ignored when using ForceSeek - Assert.AreEqual(_numValidGeoms, geometries.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInViewFORCEINDEX(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; - sq.ValidateGeometries = validateGeometries; - - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - // NOTE ValidateGeometries is ignored when using ForceIndex - Assert.AreEqual(_numValidGeoms, geometries.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetGeometriesInViewAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.NoLockHint = true; - sq.ForceSeekHint = true; - sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; - - sq.ValidateGeometries = validateGeometries; - var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); - - Assert.IsNotNull(geometries); - // Note: ValidateGeometries is ignored when using ForceSeek or ForceIndex - Assert.AreEqual(_numValidGeoms, geometries.Count); - } - - [NUnit.Framework.Test()] - public void TestPerformanceSqlServer2008ExProvider() - { - // Note: - // This test may fail with an InvalidCastException. This is caused by multiple versions of the - // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). - // This can be solved with a in the .config file. - - var spatialType = SqlServerSpatialObjectType.Geometry; - - // testing with both providers using ExtentsMode = QueryIndividualFeatures (ie the "heaviest" lifting) - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); - SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProvider(SqlServerProviderMode.NativeSqlBytes, spatialType); - - // Note: SqlServer2008Ex provider overrides ValidateGeometries behaviour, forcing this to true. - // So to compare apples-with-apples, the SqlServer2008 provider must also set ValidateGeometries = true. - // From my testing, SqlServer2008 performance is slightly faster when using ValidateGeometries = true, - // as the SQL where clause is simpler (does not require explicitly excluding invalid geometries) - sq.ValidateGeometries = true; - - GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(spatialType); - List measurements = new List(200); - List measurementsex = new List(200); - System.Diagnostics.Stopwatch timer; - - // 10 "startup" runs, followed by 200 measured runs - for (int i = -10; i < 200; i++) - { - timer = System.Diagnostics.Stopwatch.StartNew(); - sq.GetGeometriesInView(envelope); - timer.Stop(); - if (i >= 0) measurements.Add(timer.Elapsed); - - timer = System.Diagnostics.Stopwatch.StartNew(); - sqex.GetGeometriesInView(envelope); - timer.Stop(); - if (i >= 0) measurementsex.Add(timer.Elapsed); - } - - // Remove 10 slowest and 10 fastest times: - measurements = measurements.OrderBy(x => x).Skip(10).Take(measurements.Count - 20).ToList(); - measurementsex = measurementsex.OrderBy(x => x).Skip(10).Take(measurementsex.Count - 20).ToList(); - - // Average time: - TimeSpan avg = TimeSpan.FromTicks((long)measurements.Average(x => x.Ticks)); - TimeSpan avgex = TimeSpan.FromTicks((long)measurementsex.Average(x => x.Ticks)); - - // The SqlServer2008Ex provider should be faster: - // Update Nov 2018: apparently this is no longer the case. Multiple tests following recent updates have SqlServer2008 - // consistently outperforming SqlServer2008ex (100 - 3600 records). I'm not sure if this is due to improvments in later - // releases of SqlServer, or perhaps WKB payload smaller than SqlBytes (even though requires database CPU for WKB conversion) - // for local instance SqlExpress, SqlServer2008 is consistently 30% faster than SqlServer2008Ex - // for SqlServer on local database server, - I don't have one to test against - // for Azure SQL (50DTU limit, test peaking at 26DTU), SqlServer2008 is about 5% faster than SqlServer2008Ex - Assert.Less(avgex, avg); - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] - public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - sq.ValidateGeometries = validateGeometries; - - var objectIds = sq.GetObjectIDsInView(GetTestEnvelope(spatialType)); - - Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, objectIds.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestExecuteIntersectionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.ValidateGeometries = validateGeometries; - - SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); - - sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); - - Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] - public void TestExecuteIntersectionQueryExceedGeogMaxExtents(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, - double x1, double x2, double y1, double y2) - { - // occurs when user zooms out beyond map extents. For Geog, when latitude approaches 90 N or S can result in - // error 24206: "The specified input cannot be accepted because it contains an edge with antipodal points." - // Longitudes exceeding -179.99999999 or 180.0 are "wrapped" resulting in unexpected polygon (also contributes to err 24206) - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); - - sq.ExecuteIntersectionQuery(new GeoAPI.Geometries.Envelope(x1, x2, y1, y2), ds); - - Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestExecuteIntersectionQueryAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - sq.NoLockHint = true; - sq.ForceSeekHint = true; - sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; ; - sq.ValidateGeometries = validateGeometries; - - SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); - - sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); - // Note: ValidateGeometries ignored when using ForceSeek or ForceIndex - Assert.AreEqual(_numValidGeoms, ds.Tables[0].Rows.Count); - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); - - int count = sq.GetFeatureCount(); - - // includes NULL, EMPTY, and INVALID geoms - Assert.AreEqual(_numFeatures, count); - } - - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); - - sq.DefinitionQuery = "NAME LIKE 'A%'"; - - int count = sq.GetFeatureCount(); - - Assert.LessOrEqual(count, _numValidGeoms); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] - public void TestGetFeature(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - var feature = sq.GetFeature(1); - - Assert.IsNotNull(feature); - Assert.IsNotNull(feature.Geometry); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureNonExisting(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - var feature = sq.GetFeature(99999999); - - Assert.IsNull(feature); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureNullGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - var feature = sq.GetFeature(_idNullGeom); - - Assert.IsNotNull(feature); - Assert.IsNull(feature.Geometry); - } - - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] - public void TestGetFeatureEmptyGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - - var feature = sq.GetFeature(_idEmptyGeom); - - Assert.IsNotNull(feature); - Assert.IsTrue(feature.Geometry.IsEmpty); - } - - // NetTopologySuite.IO.WKBReader can make sense of SqlServer invalid Geoms! - //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] - //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] - [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] - public void TestGetFeatureInvalidGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) - { - SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); - sq.ValidateGeometries = validateGeometries; - - var feature = sq.GetFeature(_idInvalidGeom); - - Assert.IsNotNull(feature); - if (providerMode== SqlServerProviderMode.NativeSqlBytes) - // client side conversion always attempts validation - Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); - else - { - if (validateGeometries) - Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); - else - Assert.IsTrue(feature.Geometry.IsEmpty); - } - } - - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Data.SqlClient; +using System.Collections.ObjectModel; +using System.IO; +using SharpMap.Data.Providers; + +namespace UnitTests.Data.Providers +{ + [NUnit.Framework.TestFixture] + public class SQLServer2008Tests + { + [TestFixtureSetUp] + public void SetupFixture() + { + GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + } + + [NUnit.Framework.TestCase("[sde].[gisadmin.di]", "sde", "gisadmin.di")] + [NUnit.Framework.TestCase("[sde.gisadmin].[di]", "sde.gisadmin", "di")] + [NUnit.Framework.TestCase("sde.gisadmin.di", "sde.gisadmin", "di")] + public void VerifySchemaDetection(string schemaTable, string tableSchema, string table) + { + SharpMap.Data.Providers.SqlServer2008 sq = new SharpMap.Data.Providers.SqlServer2008("", schemaTable, "oidcolumn"); + Assert.AreEqual(tableSchema, sq.TableSchema); + Assert.AreEqual(table, sq.Table); + Assert.AreEqual("oidcolumn", sq.ObjectIdColumn); + + System.Reflection.PropertyInfo pi = sq.GetType().GetProperty("QualifiedTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty); + string qualifiedTable = (string)pi.GetValue(sq, null); + Assert.IsTrue(qualifiedTable.Contains(tableSchema)); + Assert.IsTrue(qualifiedTable.Contains(table)); + } + } + + [NUnit.Framework.TestFixture] + public class SQLServer2008DbTests + { + // IGNORE: + // 1) see SetupFixture where all SQLServer2008DbTests will be ignored if a valid SqlServer connection string is not supplied + // 2) see GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) where all + // tests involving SqlServer2008Ex provider can be skipped + // NUM RECORDS: + // see SetupFixture: indexes = indexes.Take(100); may be commented out to use all shapefile records + + public enum SqlServerProviderMode + { + WellKnownBinary, + NativeSqlBytes + } + + private const int GeographySrid = 4326; // Geography types MUST have a valid spatial reference + private int _geometrySrid = 0; + private const string GeometrySpatialIndex = "IX_roads_ugl_GEOM"; + private const string GeographySpatialIndex = "IX_roads_ugl_GEOG"; + + private int _numValidGeoms; // number of valid spatial features + private int _numInvalidGeoms; // number of invalid spatial features + private int _numValidatedGeoms; // number of spatial featuress = _numValidGeoms + Validated(_numInvalidGeoms) + private int _numFeatures; // number of records + private uint _idNullGeom; + private uint _idEmptyGeom; + private uint _idInvalidGeom; + + private string GetTestFile() + { + return Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); + } + private string GetPathToTestDataDir() + { + return Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); + } + + [TestFixtureSetUp] + public void SetupFixture() + { + SqlConnectionStringBuilder connStrBuilder = new SqlConnectionStringBuilder(UnitTests.Properties.Settings.Default.SqlServer2008); + if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) + { + Assert.Ignore("Requires SQL Server connectionstring"); + } + + GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + + // Set up sample tables (Geometry + Geography) + using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) + { + conn.Open(); + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = "CREATE TABLE roads_ugl_geom(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOM geometry)"; + cmd.ExecuteNonQuery(); + } + + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = "CREATE TABLE roads_ugl_geog(ID int identity(1,1) PRIMARY KEY, NAME nvarchar(100), GEOG geography)"; + cmd.ExecuteNonQuery(); + } + + // Load data + using (SharpMap.Data.Providers.ShapeFile shapeFile = new SharpMap.Data.Providers.ShapeFile(GetTestFile())) + { + shapeFile.Open(); + _geometrySrid = shapeFile.SRID; + + IEnumerable indexes = shapeFile.GetObjectIDsInView(shapeFile.GetExtents()); + + // Note that spatial indexes may only kick in at certain number of records + // so for thorough testing comment out next line and load all features (approx 3500) + indexes = indexes.Take(100); + + var cmdGeom = new SqlCommand("INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES (@Name, geometry::STGeomFromText(@Geom, @Srid))", conn); + var cmdGeog = new SqlCommand("INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES (@Name, geography::STGeomFromText(@Geog, @Srid))", conn); + + foreach (uint idx in indexes) + { + SharpMap.Data.FeatureDataRow feature = shapeFile.GetFeature(idx); + + string wkt; + + if (feature.Geometry == null || feature.Geometry.IsEmpty) + wkt = "LINESTRING EMPTY"; + else + wkt = feature.Geometry.AsText(); + + if (cmdGeom.Parameters.Count == 0) + { + cmdGeom.Parameters.AddWithValue("@Geom", wkt); + cmdGeom.Parameters.AddWithValue("@Name", feature["NAME"]); + cmdGeom.Parameters.AddWithValue("@Srid", _geometrySrid); + } + else + { + cmdGeom.Parameters[0].Value = wkt; + cmdGeom.Parameters[1].Value = feature["NAME"]; + } + cmdGeom.ExecuteNonQuery(); + + if (cmdGeog.Parameters.Count == 0) + { + cmdGeog.Parameters.AddWithValue("@Geog", wkt); + cmdGeog.Parameters.AddWithValue("@Name", feature["NAME"]); + cmdGeog.Parameters.AddWithValue("@Srid", GeographySrid); + } + else + { + cmdGeog.Parameters[0].Value = wkt; + cmdGeog.Parameters[1].Value = feature["NAME"]; + } + cmdGeog.ExecuteNonQuery(); + } + + cmdGeom.Dispose(); + cmdGeog.Dispose(); + } + + // ensure we have some features with NULL and EMPTY geometries + using (var cmd = conn.CreateCommand()) + { + // To find invalid geometries: + // SELECT {OidColumn}, {GeometryColumn}.STIsValid() AS STIsValid, {GeometryColumn}.IsValidDetailed() AS IsValidDetailed FROM {QualifiedTableName} + + // NULL + cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test null wkt', NULL)"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test null wkt', NULL)"; + cmd.ExecuteNonQuery(); + + // EMPTY + cmd.CommandText = "INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test empty wkt', 'LINESTRING EMPTY')"; + cmd.ExecuteNonQuery(); + + // INVALID (ID 144 from shape file; see also ID 2055) + cmd.CommandText = $"INSERT INTO roads_ugl_geom(NAME, GEOM) VALUES ('Test invalid wkt', geometry::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {_geometrySrid}))"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = $"INSERT INTO roads_ugl_geog(NAME, GEOG) VALUES ('Test invalid wkt', geography::STGeomFromText('LINESTRING (-84.652756071629071 42.676743004284312, -84.652924071615374 42.676624004283632, -84.652756071629071 42.676743004284312, -84.652512071649028 42.676922004285323, -84.641022072594438 42.685478004332808, -84.638779072781034 42.687271004342172, -84.636932072941363 42.689831004350026, -84.634491073153043 42.693100004360424, -84.62387107404335 42.701092004405112, -84.603256075794022 42.715752004493233, -84.603142075803831 42.715832004493734, -84.599823076091937 42.718651004508146, -84.588676077031693 42.722431004556235, -84.586021077270672 42.725533004568049)', {GeographySrid}))"; + cmd.ExecuteNonQuery(); + } + + // Create GEOM spatial index + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeometrySpatialIndex}] ON [dbo].[roads_ugl_geom](GEOM) USING GEOMETRY_GRID WITH (BOUNDING_BOX =(-98, 40, -82, 50), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM))"; + cmd.CommandTimeout = 300; + cmd.ExecuteNonQuery(); + } + + // Create GEOG spatial index + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"CREATE SPATIAL INDEX [{GeographySpatialIndex}] ON [dbo].[roads_ugl_geog](GEOG)"; + cmd.CommandTimeout = 300; + cmd.ExecuteNonQuery(); + + } + + // initialise counts and test IDs + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 1"; + _numValidGeoms = (int)cmd.ExecuteScalar(); + + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom WHERE GEOM IS NOT NULL AND Geom.STIsEmpty() = 0 AND Geom.STIsValid() = 0"; + _numInvalidGeoms = (int)cmd.ExecuteScalar(); + + _numValidatedGeoms = _numValidGeoms + _numInvalidGeoms; + + cmd.CommandText = $"SELECT COUNT(ID) FROM roads_ugl_geom"; + _numFeatures = (int)cmd.ExecuteScalar(); + + _idNullGeom = (uint)(_numFeatures - 2); + _idEmptyGeom = (uint)(_numFeatures - 1); + _idInvalidGeom = (uint)(_numFeatures); + } + + } + } + + [TestFixtureTearDown] + public void TearDownTestFixture() + { + SqlConnectionStringBuilder connStrBuilder = new SqlConnectionStringBuilder(UnitTests.Properties.Settings.Default.SqlServer2008); + if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) + { + return; + } + + // Drop sample tables + using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) + { + conn.Open(); + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = "DROP TABLE roads_ugl_geom"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE roads_ugl_geog"; + cmd.ExecuteNonQuery(); + } + } + } + + private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerSpatialObjectType spatialType) + { + return GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); + } + + private SharpMap.Data.Providers.SqlServer2008 GetTestProvider(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SqlServer2008 provider; + + switch (providerMode) + { + case SqlServerProviderMode.NativeSqlBytes: + //Assert.Ignore("Ignore SharpMap.Data.Providers.SqlServer2008Ex"); + + if (spatialType == SqlServerSpatialObjectType.Geography) + // NB note forcing WGS84 + provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + else + provider = new SharpMap.Data.Providers.SqlServer2008Ex(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + break; + + default: + if (spatialType == SqlServerSpatialObjectType.Geography) + // NB note forcing WGS84 + provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geog", "GEOG", "ID", spatialType, GeographySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + else + provider = new SharpMap.Data.Providers.SqlServer2008(UnitTests.Properties.Settings.Default.SqlServer2008, + "roads_ugl_geom", "GEOM", "ID", spatialType, _geometrySrid, SqlServer2008ExtentsMode.QueryIndividualFeatures); + break; + } + + //provider.ValidateGeometries = true + //provider.DefinitionQuery = "ID NOT IN (103)" // Invalid Geom + + return provider; + } + + /// + /// Get the envelope of the entire roads_ugl file + /// + private GeoAPI.Geometries.Envelope GetTestEnvelope(SqlServerSpatialObjectType spatialType) + { + var env = SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse("POLYGON ((-97.23724071609665 41.698023105763589, -82.424263624596563 41.698023105763589, -82.424263624596563 49.000629000758515, -97.23724071609665 49.000629000758515, -97.23724071609665 41.698023105763589))").EnvelopeInternal; + if (spatialType == SqlServerSpatialObjectType.Geography) + // Geography works with boundaries on the spheroid (not rectilinear), so enlarge to ensure we get all features + env.ExpandBy(0.2); + return env; + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsQueryIndividualFeatures(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.QueryIndividualFeatures; + GeoAPI.Geometries.Envelope extents = sq.GetExtents(); + + Assert.IsNotNull(extents); + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsSpatialIndex(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + + if (spatialType == SqlServerSpatialObjectType.Geography) + { + var ex = Assert.Throws(() => + { + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; + }); + } + else + { + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.SpatialIndex; + GeoAPI.Geometries.Envelope extents = sq.GetExtents(); + + Assert.IsNotNull(extents); + } + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + [ExpectedException(typeof(ArgumentOutOfRangeException))] + public void TestSqlServer2008ExProviderOverridesValidateGeometries(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider( SqlServerProviderMode.NativeSqlBytes, spatialType); + sq.ValidateGeometries = false; + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetExtentsEnvelopeAggregate(SqlServerSpatialObjectType spatialType) + { + using (SqlConnection conn = new SqlConnection(UnitTests.Properties.Settings.Default.SqlServer2008)) + { + conn.Open(); + using (SqlCommand cmd = conn.CreateCommand()) + { + cmd.CommandText = "SELECT SERVERPROPERTY('productversion')"; + string productversion = (string)cmd.ExecuteScalar(); + if (Version.Parse(productversion).Major < 11) + { + Assert.Ignore("Requires SQL Server 2012 connection"); + } + } + } + + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + + sq.ExtentsMode = SharpMap.Data.Providers.SqlServer2008ExtentsMode.EnvelopeAggregate; + GeoAPI.Geometries.Envelope extents = sq.GetExtents(); + + Assert.IsNotNull(extents); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInView(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.IsNotNull(geometries); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetGeometriesInViewDefinitionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.DefinitionQuery = "NAME LIKE 'A%'"; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.IsNotNull(geometries); + Assert.LessOrEqual(geometries.Count, _numValidGeoms); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewNOLOCK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.NoLockHint = true; + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, geometries.Count); + + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewFORCESEEK(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.ForceSeekHint = true; + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.IsNotNull(geometries); + // NOTE ValidateGeometries is ignored when using ForceSeek + Assert.AreEqual(_numValidGeoms, geometries.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewFORCEINDEX(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; + sq.ValidateGeometries = validateGeometries; + + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.IsNotNull(geometries); + // NOTE ValidateGeometries is ignored when using ForceIndex + Assert.AreEqual(_numValidGeoms, geometries.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetGeometriesInViewAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.NoLockHint = true; + sq.ForceSeekHint = true; + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; + + sq.ValidateGeometries = validateGeometries; + var geometries = sq.GetGeometriesInView(GetTestEnvelope(spatialType)); + + Assert.IsNotNull(geometries); + // Note: ValidateGeometries is ignored when using ForceSeek or ForceIndex + Assert.AreEqual(_numValidGeoms, geometries.Count); + } + + [NUnit.Framework.Test()] + public void TestPerformanceSqlServer2008ExProvider() + { + // Note: + // This test may fail with an InvalidCastException. This is caused by multiple versions of the + // Microsoft.SqlServer.Types assembly being available (e.g. SQL 2008 and 2012). + // This can be solved with a in the .config file. + + var spatialType = SqlServerSpatialObjectType.Geometry; + + // testing with both providers using ExtentsMode = QueryIndividualFeatures (ie the "heaviest" lifting) + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); + SharpMap.Data.Providers.SqlServer2008 sqex = GetTestProvider(SqlServerProviderMode.NativeSqlBytes, spatialType); + + // Note: SqlServer2008Ex provider overrides ValidateGeometries behaviour, forcing this to true. + // So to compare apples-with-apples, the SqlServer2008 provider must also set ValidateGeometries = true. + // From my testing, SqlServer2008 performance is slightly faster when using ValidateGeometries = true, + // as the SQL where clause is simpler (does not require explicitly excluding invalid geometries) + sq.ValidateGeometries = true; + + GeoAPI.Geometries.Envelope envelope = GetTestEnvelope(spatialType); + List measurements = new List(200); + List measurementsex = new List(200); + System.Diagnostics.Stopwatch timer; + + // 10 "startup" runs, followed by 200 measured runs + for (int i = -10; i < 200; i++) + { + timer = System.Diagnostics.Stopwatch.StartNew(); + sq.GetGeometriesInView(envelope); + timer.Stop(); + if (i >= 0) measurements.Add(timer.Elapsed); + + timer = System.Diagnostics.Stopwatch.StartNew(); + sqex.GetGeometriesInView(envelope); + timer.Stop(); + if (i >= 0) measurementsex.Add(timer.Elapsed); + } + + // Remove 10 slowest and 10 fastest times: + measurements = measurements.OrderBy(x => x).Skip(10).Take(measurements.Count - 20).ToList(); + measurementsex = measurementsex.OrderBy(x => x).Skip(10).Take(measurementsex.Count - 20).ToList(); + + // Average time: + TimeSpan avg = TimeSpan.FromTicks((long)measurements.Average(x => x.Ticks)); + TimeSpan avgex = TimeSpan.FromTicks((long)measurementsex.Average(x => x.Ticks)); + + // The SqlServer2008Ex provider should be faster: + // Update Nov 2018: "should".... highly dependent on client computer specs, and dataset characteristics + // may also have an affect in real-world usage (eg num records, OGC geom type, geom complexity). + // For the test dataset @ 100 records and also @ 3600 records on an AVERAGE computer, SqlServer2008 is + // consistently out-performing SqlServer2008Ex as follows: + // for local instance SqlExpress, SqlServer2008 is consistently 30% faster than SqlServer2008Ex + // for SqlServer on local database server, - I don't have one to test against + // for Azure SQL (50DTU limit, test peaking at 26DTU), SqlServer2008 is about 5% faster than SqlServer2008Ex + Assert.Less(avgex, avg); + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography, true)] + public void TestGetObjectIDsInView(SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + sq.ValidateGeometries = validateGeometries; + + var objectIds = sq.GetObjectIDsInView(GetTestEnvelope(spatialType)); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, objectIds.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestExecuteIntersectionQuery(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.ValidateGeometries = validateGeometries; + + SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); + + sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -179, 179, -89.4, 89.4)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, -180, 180, -90, 90)] + public void TestExecuteIntersectionQueryExceedGeogMaxExtents(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, + double x1, double x2, double y1, double y2) + { + // occurs when user zooms out beyond map extents. For Geog, when latitude approaches 90 N or S can result in + // error 24206: "The specified input cannot be accepted because it contains an edge with antipodal points." + // Longitudes exceeding -179.99999999 or 180.0 are "wrapped" resulting in unexpected polygon (also contributes to err 24206) + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); + + sq.ExecuteIntersectionQuery(new GeoAPI.Geometries.Envelope(x1, x2, y1, y2), ds); + + Assert.AreEqual(sq.ValidateGeometries ? _numValidatedGeoms : _numValidGeoms, ds.Tables[0].Rows.Count); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestExecuteIntersectionQueryAllHints(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + sq.NoLockHint = true; + sq.ForceSeekHint = true; + sq.ForceIndex = spatialType == SqlServerSpatialObjectType.Geometry ? GeometrySpatialIndex : GeographySpatialIndex; ; + sq.ValidateGeometries = validateGeometries; + + SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet(); + + sq.ExecuteIntersectionQuery(GetTestEnvelope(spatialType), ds); + // Note: ValidateGeometries ignored when using ForceSeek or ForceIndex + Assert.AreEqual(_numValidGeoms, ds.Tables[0].Rows.Count); + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureCount(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(spatialType); + + int count = sq.GetFeatureCount(); + + // includes NULL, EMPTY, and INVALID geoms + Assert.AreEqual(_numFeatures, count); + } + + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureCountWithDefinitionQuery(SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(SqlServerProviderMode.WellKnownBinary, spatialType); + + sq.DefinitionQuery = "NAME LIKE 'A%'"; + + int count = sq.GetFeatureCount(); + + Assert.LessOrEqual(count, _numValidGeoms); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeature(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(1); + + Assert.IsNotNull(feature); + Assert.IsNotNull(feature.Geometry); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureNonExisting(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(99999999); + + Assert.IsNull(feature); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureNullGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(_idNullGeom); + + Assert.IsNotNull(feature); + Assert.IsNull(feature.Geometry); + } + + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography)] + public void TestGetFeatureEmptyGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + + var feature = sq.GetFeature(_idEmptyGeom); + + Assert.IsNotNull(feature); + Assert.IsTrue(feature.Geometry.IsEmpty); + } + + // NetTopologySuite.IO.WKBReader can make sense of SqlServer invalid Geoms! + //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.WellKnownBinary, SqlServerSpatialObjectType.Geography, true)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, false)] + //[NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, false)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geometry, true)] + [NUnit.Framework.TestCase(SqlServerProviderMode.NativeSqlBytes, SqlServerSpatialObjectType.Geography, true)] + public void TestGetFeatureInvalidGeometry(SqlServerProviderMode providerMode, SqlServerSpatialObjectType spatialType, bool validateGeometries) + { + SharpMap.Data.Providers.SqlServer2008 sq = GetTestProvider(providerMode, spatialType); + sq.ValidateGeometries = validateGeometries; + + var feature = sq.GetFeature(_idInvalidGeom); + + Assert.IsNotNull(feature); + if (providerMode== SqlServerProviderMode.NativeSqlBytes) + // client side conversion always attempts validation + Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); + else + { + if (validateGeometries) + Assert.IsTrue(!feature.Geometry.IsEmpty && feature.Geometry.IsValid); + else + Assert.IsTrue(feature.Geometry.IsEmpty); + } + } + + } +} diff --git a/UnitTests/Data/Providers/ShapeFileProviderTests.cs b/UnitTests/Data/Providers/ShapeFileProviderTests.cs index cfaf9f8f..be9a7dc2 100644 --- a/UnitTests/Data/Providers/ShapeFileProviderTests.cs +++ b/UnitTests/Data/Providers/ShapeFileProviderTests.cs @@ -1,24 +1,24 @@ - -namespace UnitTests.Data.Providers -{ - - [NUnit.Framework.TestFixture] - public class ShapeFileProviderTests : ProviderTest - { - - private long _msLineal; - private long _msVector; - private const int NumberOfRenderCycles = 1; - - [NUnit.Framework.TestFixtureTearDown] - public void TestFixtureTearDown() - { - System.Diagnostics.Trace.WriteLine("Speed comparison:"); - System.Diagnostics.Trace.WriteLine("VectorLayer\tLinealLayer\tRatio"); - System.Diagnostics.Trace.WriteLine(string.Format("{0}\t{1}\t{2:N}", _msVector, _msLineal, - ((double)_msLineal / _msVector * 100))); - } - + +namespace UnitTests.Data.Providers +{ + + [NUnit.Framework.TestFixture] + public class ShapeFileProviderTests : ProviderTest + { + + private long _msLineal; + private long _msVector; + private const int NumberOfRenderCycles = 1; + + [NUnit.Framework.TestFixtureTearDown] + public void TestFixtureTearDown() + { + System.Diagnostics.Trace.WriteLine("Speed comparison:"); + System.Diagnostics.Trace.WriteLine("VectorLayer\tLinealLayer\tRatio"); + System.Diagnostics.Trace.WriteLine(string.Format("{0}\t{1}\t{2:N}", _msVector, _msLineal, + ((double)_msLineal / _msVector * 100))); + } + [NUnit.Framework.Test] public void TestReadValueZFromPointZShapeFile() { @@ -34,13 +34,13 @@ public void TestReadValueZFromPointZShapeFile() { NUnit.Framework.Assert.IsNotNull(item.Coordinate.Z); } - NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinate.Z, 146.473); - NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinate.Z, 181.374); - NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinate.Z, 146.676); - NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinate.Z, 181.087); - NUnit.Framework.Assert.AreEqual(featsInView[4].Coordinate.Z, 169.948); - NUnit.Framework.Assert.AreEqual(featsInView[5].Coordinate.Z, 169.916); - + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinate.Z, 146.473); + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinate.Z, 181.374); + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinate.Z, 146.676); + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinate.Z, 181.087); + NUnit.Framework.Assert.AreEqual(featsInView[4].Coordinate.Z, 169.948); + NUnit.Framework.Assert.AreEqual(featsInView[5].Coordinate.Z, 169.916); + sh.Close(); } @@ -59,266 +59,268 @@ public void TestReadValueZFromLineStringZShapeFile() { NUnit.Framework.Assert.IsNotNull(item.Coordinate.Z); } - NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[0].Z, 35.865); - NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[1].Z, 35.743); - - NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[0].Z, 35.518); - NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[1].Z, 35.518); - - NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[0].Z, 37.438); - NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[1].Z, 37.441); - - NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[0].Z, 37.441); - NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[1].Z, 37.441); - + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[0].Z, 35.865); + NUnit.Framework.Assert.AreEqual(featsInView[0].Coordinates[1].Z, 35.743); + + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[0].Z, 35.518); + NUnit.Framework.Assert.AreEqual(featsInView[1].Coordinates[1].Z, 35.518); + + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[0].Z, 37.438); + NUnit.Framework.Assert.AreEqual(featsInView[2].Coordinates[1].Z, 37.441); + + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[0].Z, 37.441); + NUnit.Framework.Assert.AreEqual(featsInView[3].Coordinates[1].Z, 37.441); + + sh.Close(); + } + + [NUnit.Framework.Test] + public void UsingTest() + { + using (var s = System.IO.File.Open(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), System.IO.FileMode.Open)) + { + using (var reader = new System.IO.BinaryReader(s)) + { + System.Diagnostics.Trace.WriteLine(reader.ReadInt32()); + } + NUnit.Framework.Assert.Throws(() => System.Diagnostics.Trace.WriteLine(s.Position)); + } + } + + private static void CopyShapeFile(string path, out string tmp) + { + tmp = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(),".shp"); + if (!System.IO.File.Exists(path)) throw new NUnit.Framework.IgnoreException("File not found"); + foreach (var file in System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(path), System.IO.Path.GetFileNameWithoutExtension(path) + ".*")) + { + var copyFile = System.IO.Path.ChangeExtension(tmp, System.IO.Path.GetExtension(file)); + if (System.IO.File.Exists(copyFile)) System.IO.File.Delete(copyFile); + System.IO.File.Copy(file, copyFile); + } + } + + [NUnit.Framework.Test] + public void TestDeleteAfterClose() + { + string test; + CopyShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), out test); + + var shp = new SharpMap.Data.Providers.ShapeFile(test); + shp.Open(); + shp.Close(); + var succeeded = true; + foreach (var file in System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(test), System.IO.Path.GetFileNameWithoutExtension(test) + ".*")) + { + try + { + System.IO.File.Delete(file); + } + catch (System.Exception) + { + System.Diagnostics.Trace.WriteLine("Failed to delete '{0}'", file); + succeeded = false; + } + } + NUnit.Framework.Assert.IsTrue(succeeded); + } + //private string GetTestFile() + //{ + // return System.IO.Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); + //} + + //private string GetPathToTestDataDir() + //{ + // return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); + //} + + [NUnit.Framework.Test] + public void TestReadPointZShapeFile() + { + var file = GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"); + var sh = new SharpMap.Data.Providers.ShapeFile(file, true); + sh.Open(); + var fc = sh.GetFeatureCount(); + NUnit.Framework.Assert.AreEqual(4342, fc); + NUnit.Framework.Assert.AreEqual(0, sh.GetObjectIDsInView(sh.GetExtents())[0]); + var featsInView = sh.GetGeometriesInView(new GeoAPI.Geometries.Envelope(sh.GetExtents())); + NUnit.Framework.Assert.AreEqual(4342, featsInView.Count); sh.Close(); - } - - [NUnit.Framework.Test] - public void UsingTest() - { - using (var s = System.IO.File.Open(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), System.IO.FileMode.Open)) - { - using (var reader = new System.IO.BinaryReader(s)) - { - System.Diagnostics.Trace.WriteLine(reader.ReadInt32()); - } - NUnit.Framework.Assert.Throws(() => System.Diagnostics.Trace.WriteLine(s.Position)); - } - } - - private static void CopyShapeFile(string path, out string tmp) - { - tmp = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(),".shp"); - if (!System.IO.File.Exists(path)) throw new NUnit.Framework.IgnoreException("File not found"); - foreach (var file in System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(path), System.IO.Path.GetFileNameWithoutExtension(path) + ".*")) - { - var copyFile = System.IO.Path.ChangeExtension(tmp, System.IO.Path.GetExtension(file)); - if (System.IO.File.Exists(copyFile)) System.IO.File.Delete(copyFile); - System.IO.File.Copy(file, copyFile); - } - } - - [NUnit.Framework.Test] - public void TestDeleteAfterClose() - { - string test; - CopyShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), out test); - - var shp = new SharpMap.Data.Providers.ShapeFile(test); - shp.Open(); - shp.Close(); - var succeeded = true; - foreach (var file in System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(test), System.IO.Path.GetFileNameWithoutExtension(test) + ".*")) - { - try - { - System.IO.File.Delete(file); - } - catch (System.Exception) - { - System.Diagnostics.Trace.WriteLine("Failed to delete '{0}'", file); - succeeded = false; - } - } - NUnit.Framework.Assert.IsTrue(succeeded); - } - //private string GetTestFile() - //{ - // return System.IO.Path.Combine(GetPathToTestDataDir(), "roads_ugl.shp"); - //} - - //private string GetPathToTestDataDir() - //{ - // return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.CodeBase.Replace("file:///", "")), @"TestData\"); - //} - - [NUnit.Framework.Test] - public void TestReadPointZShapeFile() - { - var file = GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"); - var sh = new SharpMap.Data.Providers.ShapeFile(file, true); - sh.Open(); - var fc = sh.GetFeatureCount(); - NUnit.Framework.Assert.AreEqual(4342, fc); - NUnit.Framework.Assert.AreEqual(0, sh.GetObjectIDsInView(sh.GetExtents())[0]); - var featsInView = sh.GetGeometriesInView(new GeoAPI.Geometries.Envelope(sh.GetExtents())); - NUnit.Framework.Assert.AreEqual(4342, featsInView.Count); - sh.Close(); - } - - [NUnit.Framework.Test] - public void TestPerformanceVectorLayer() - { - NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), - "Specified shapefile is not present!"); - - var map = new SharpMap.Map(new System.Drawing.Size(1024, 768)); - - var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); - var lyr = new SharpMap.Layers.VectorLayer("Roads", shp); - - map.Layers.Add(lyr); - map.ZoomToExtents(); - - RepeatedRendering(map, shp.GetFeatureCount(), NumberOfRenderCycles, out _msVector); - - var res = map.GetMap(); - var path = System.IO.Path.ChangeExtension(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), ".vector.png"); - res.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); - } - - [NUnit.Framework.Test] - public void TestPerformanceLinealLayer() - { - NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("roads_ugl.shp")), - "Specified shapefile is not present!"); - - var map = new SharpMap.Map(new System.Drawing.Size(1024, 768)); - - var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("roads_ugl.shp"), false, false); - var lyr = new SharpMap.Layers.Symbolizer.LinealVectorLayer("Roads", shp) - { - Symbolizer = - new SharpMap.Rendering.Symbolizer.BasicLineSymbolizer - {Line = new System.Drawing.Pen(System.Drawing.Color.Black)} - }; - map.Layers.Add(lyr); - map.ZoomToExtents(); - - RepeatedRendering(map, shp.GetFeatureCount(), NumberOfRenderCycles, out _msLineal); - System.Diagnostics.Trace.WriteLine("\nWith testing if record is deleted "); - - shp.CheckIfRecordIsDeleted = true; - long tmp; - RepeatedRendering(map, shp.GetFeatureCount(), 1, out tmp); - - var res = map.GetMap(); - var path = System.IO.Path.ChangeExtension(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), "lineal.png"); - res.Save(path, System.Drawing.Imaging.ImageFormat.Png); - System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); - } - - private static void RepeatedRendering(SharpMap.Map map, int numberOfFeatures, int numberOfTimes, out long avgRenderTime) - { - System.Diagnostics.Trace.WriteLine("Rendering Map with " + numberOfFeatures + " features"); - var totalRenderTime = 0L; - var sw = new System.Diagnostics.Stopwatch(); - for (var i = 1; i <= numberOfTimes; i++) - { - System.Diagnostics.Trace.Write(string.Format("Rendering {0}x time(s)", i)); - sw.Start(); - map.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(" in " + - sw.ElapsedMilliseconds.ToString( - System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); - totalRenderTime += sw.ElapsedMilliseconds; - sw.Reset(); - } - - avgRenderTime = totalRenderTime/numberOfTimes; - System.Diagnostics.Trace.WriteLine("\n Average rendering time:" + avgRenderTime.ToString( - System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); - } - - [NUnit.Framework.Test] - public void TestGetFeature() - { - NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), - "Specified shapefile is not present!"); - - var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); - shp.Open(); - var feat = shp.GetFeature(0); - NUnit.Framework.Assert.IsNotNull(feat); - shp.Close(); - } - - [NUnit.Framework.Test] - public void TestExecuteIntersectionQuery() - { - NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), - "Specified shapefile is not present!"); - - var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); - shp.Open(); - - var fds = new SharpMap.Data.FeatureDataSet(); - var bbox = shp.GetExtents(); - //narrow it down - bbox.ExpandBy(-0.425*bbox.Width, -0.425*bbox.Height); - - //Just to avoid that initial query does not impose performance penalty - shp.DoTrueIntersectionQuery = false; - shp.ExecuteIntersectionQuery(bbox, fds); - fds.Tables.RemoveAt(0); - - //Perform query once more - var sw = new System.Diagnostics.Stopwatch(); - sw.Start(); - shp.ExecuteIntersectionQuery(bbox, fds); - sw.Stop(); - System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + - sw.ElapsedMilliseconds + "ms."); - fds.Tables.RemoveAt(0); - - shp.DoTrueIntersectionQuery = true; - sw.Reset(); - sw.Start(); - shp.ExecuteIntersectionQuery(bbox, fds); - sw.Stop(); - System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + - sw.ElapsedMilliseconds + "ms."); - } - - [NUnit.Framework.Test] - public void TestExecuteIntersectionQueryWithFilterDelegate() - { - NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), - "Specified shapefile is not present!"); - - var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); - shp.Open(); - - var fds = new SharpMap.Data.FeatureDataSet(); - var bbox = shp.GetExtents(); - //narrow it down - bbox.ExpandBy(-0.425*bbox.Width, -0.425*bbox.Height); - - //Just to avoid that initial query does not impose performance penalty - shp.DoTrueIntersectionQuery = false; - shp.FilterDelegate = JustTracks; - - shp.ExecuteIntersectionQuery(bbox, fds); - fds.Tables.RemoveAt(0); - - //Perform query once more - var sw = new System.Diagnostics.Stopwatch(); - sw.Start(); - shp.ExecuteIntersectionQuery(bbox, fds); - sw.Stop(); - System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + - sw.ElapsedMilliseconds + "ms."); - fds.Tables.RemoveAt(0); - - shp.DoTrueIntersectionQuery = true; - sw.Reset(); - sw.Start(); - shp.ExecuteIntersectionQuery(bbox, fds); - sw.Stop(); - System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + - sw.ElapsedMilliseconds + "ms."); - } - - public static bool JustTracks(SharpMap.Data.FeatureDataRow fdr) - { - //System.Diagnostics.Trace.WriteLine(fdr [0] + ";"+ fdr[4]); - var s = fdr[4] as string; - if (s != null) - return s == "track"; - return true; - } - } -} + } + + [NUnit.Framework.Test] + public void TestPerformanceVectorLayer() + { + NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), + "Specified shapefile is not present!"); + + var map = new SharpMap.Map(new System.Drawing.Size(1024, 768)); + + var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); + var lyr = new SharpMap.Layers.VectorLayer("Roads", shp); + + map.Layers.Add(lyr); + map.ZoomToExtents(); + + RepeatedRendering(map, shp.GetFeatureCount(), NumberOfRenderCycles, out _msVector); + + var path = System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "SPATIAL_F_SKARVMUFF.shp"); + path = System.IO.Path.ChangeExtension(path, ".vector.png"); + using (var res = map.GetMap()) + res.Save(path, System.Drawing.Imaging.ImageFormat.Png); + System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); + } + + [NUnit.Framework.Test] + public void TestPerformanceLinealLayer() + { + NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("roads_ugl.shp")), + "Specified shapefile is not present!"); + + var map = new SharpMap.Map(new System.Drawing.Size(1024, 768)); + + var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("roads_ugl.shp"), false, false); + var lyr = new SharpMap.Layers.Symbolizer.LinealVectorLayer("Roads", shp) + { + Symbolizer = + new SharpMap.Rendering.Symbolizer.BasicLineSymbolizer + {Line = new System.Drawing.Pen(System.Drawing.Color.Black)} + }; + map.Layers.Add(lyr); + map.ZoomToExtents(); + + RepeatedRendering(map, shp.GetFeatureCount(), NumberOfRenderCycles, out _msLineal); + System.Diagnostics.Trace.WriteLine("\nWith testing if record is deleted "); + + shp.CheckIfRecordIsDeleted = true; + long tmp; + RepeatedRendering(map, shp.GetFeatureCount(), 1, out tmp); + + var path = System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "SPATIAL_F_SKARVMUFF.shp"); + path = System.IO.Path.ChangeExtension(path, "lineal.png"); + using (var res = map.GetMap()) + res.Save(path, System.Drawing.Imaging.ImageFormat.Png); + System.Diagnostics.Trace.WriteLine("\nResult saved at file://" + path.Replace('\\', '/')); + } + + private static void RepeatedRendering(SharpMap.Map map, int numberOfFeatures, int numberOfTimes, out long avgRenderTime) + { + System.Diagnostics.Trace.WriteLine("Rendering Map with " + numberOfFeatures + " features"); + var totalRenderTime = 0L; + var sw = new System.Diagnostics.Stopwatch(); + for (var i = 1; i <= numberOfTimes; i++) + { + System.Diagnostics.Trace.Write(string.Format("Rendering {0}x time(s)", i)); + sw.Start(); + map.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(" in " + + sw.ElapsedMilliseconds.ToString( + System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); + totalRenderTime += sw.ElapsedMilliseconds; + sw.Reset(); + } + + avgRenderTime = totalRenderTime/numberOfTimes; + System.Diagnostics.Trace.WriteLine("\n Average rendering time:" + avgRenderTime.ToString( + System.Globalization.NumberFormatInfo.CurrentInfo) + "ms."); + } + + [NUnit.Framework.Test] + public void TestGetFeature() + { + NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), + "Specified shapefile is not present!"); + + var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); + shp.Open(); + var feat = shp.GetFeature(0); + NUnit.Framework.Assert.IsNotNull(feat); + shp.Close(); + } + + [NUnit.Framework.Test] + public void TestExecuteIntersectionQuery() + { + NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), + "Specified shapefile is not present!"); + + var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); + shp.Open(); + + var fds = new SharpMap.Data.FeatureDataSet(); + var bbox = shp.GetExtents(); + //narrow it down + bbox.ExpandBy(-0.425*bbox.Width, -0.425*bbox.Height); + + //Just to avoid that initial query does not impose performance penalty + shp.DoTrueIntersectionQuery = false; + shp.ExecuteIntersectionQuery(bbox, fds); + fds.Tables.RemoveAt(0); + + //Perform query once more + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + shp.ExecuteIntersectionQuery(bbox, fds); + sw.Stop(); + System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + + sw.ElapsedMilliseconds + "ms."); + fds.Tables.RemoveAt(0); + + shp.DoTrueIntersectionQuery = true; + sw.Reset(); + sw.Start(); + shp.ExecuteIntersectionQuery(bbox, fds); + sw.Stop(); + System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + + sw.ElapsedMilliseconds + "ms."); + } + + [NUnit.Framework.Test] + public void TestExecuteIntersectionQueryWithFilterDelegate() + { + NUnit.Framework.Assert.IsTrue(System.IO.File.Exists(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp")), + "Specified shapefile is not present!"); + + var shp = new SharpMap.Data.Providers.ShapeFile(GetTestDataFilePath("SPATIAL_F_SKARVMUFF.shp"), false, false); + shp.Open(); + + var fds = new SharpMap.Data.FeatureDataSet(); + var bbox = shp.GetExtents(); + //narrow it down + bbox.ExpandBy(-0.425*bbox.Width, -0.425*bbox.Height); + + //Just to avoid that initial query does not impose performance penalty + shp.DoTrueIntersectionQuery = false; + shp.FilterDelegate = JustTracks; + + shp.ExecuteIntersectionQuery(bbox, fds); + fds.Tables.RemoveAt(0); + + //Perform query once more + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + shp.ExecuteIntersectionQuery(bbox, fds); + sw.Stop(); + System.Diagnostics.Trace.WriteLine("Queried using just envelopes:\n" + fds.Tables[0].Rows.Count + " in " + + sw.ElapsedMilliseconds + "ms."); + fds.Tables.RemoveAt(0); + + shp.DoTrueIntersectionQuery = true; + sw.Reset(); + sw.Start(); + shp.ExecuteIntersectionQuery(bbox, fds); + sw.Stop(); + System.Diagnostics.Trace.WriteLine("Queried using prepared geometries:\n" + fds.Tables[0].Rows.Count + " in " + + sw.ElapsedMilliseconds + "ms."); + } + + public static bool JustTracks(SharpMap.Data.FeatureDataRow fdr) + { + //System.Diagnostics.Trace.WriteLine(fdr [0] + ";"+ fdr[4]); + var s = fdr[4] as string; + if (s != null) + return s == "track"; + return true; + } + } +} diff --git a/UnitTests/Layers/CoordinateTransformationTest.cs b/UnitTests/Layers/CoordinateTransformationTest.cs index 76aa101a..bfc4a209 100644 --- a/UnitTests/Layers/CoordinateTransformationTest.cs +++ b/UnitTests/Layers/CoordinateTransformationTest.cs @@ -34,7 +34,7 @@ public void CoordinateTransformation_ChangingTargetSrid_PR101() m.ZoomToBox(box); using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "NoTargetSrid.bmp")); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), _baseFileName + "NoTargetSrid.bmp")); // Test setting TargetSRID (should cause CoordinateTransformation to be updated) and generate maps with symmetrical 8-pointed star TestSrid(m, 4326, _gcsTolerance); @@ -115,7 +115,7 @@ private void TestSrid(Map m, int targetSrid, double tolerance) // visual check: symmetrical 8-pointed star using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "_SRID_" + targetSrid + ".bmp")); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), _baseFileName + "_SRID_" + targetSrid + ".bmp")); } private void TestTrans(Map m, int targetSrid, double tolerance) @@ -135,7 +135,7 @@ private void TestTrans(Map m, int targetSrid, double tolerance) // visual check: symmetrical 8-pointed star using (var img = m.GetMap()) - img.Save(System.IO.Path.Combine(System.IO.Path.GetTempPath(), _baseFileName + "_Trans_" + targetSrid + ".bmp")); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), _baseFileName + "_Trans_" + targetSrid + ".bmp")); } private void SetTargetSridAndZoomExtents(Map m, int targetSrid) diff --git a/UnitTests/Layers/LabelLayerTest.cs b/UnitTests/Layers/LabelLayerTest.cs index 6910d386..3f6f4f90 100644 --- a/UnitTests/Layers/LabelLayerTest.cs +++ b/UnitTests/Layers/LabelLayerTest.cs @@ -1,90 +1,90 @@ -using System.Data; -using System.Drawing; -using System.Drawing.Imaging; -using System.Runtime.InteropServices; -using GeoAPI.Geometries; -using NUnit.Framework; -using SharpMap.Data; -using SharpMap.Data.Providers; -using SharpMap.Layers; -using SharpMap.Rendering.Thematics; -using SharpMap.Styles; - -namespace UnitTests.Layers -{ - public class LabelLayerTest - { - private FeatureDataTable _featureDataTable; - - [TestFixtureSetUp] - public void FixtureSetUp() - { - var fdt = new FeatureDataTable(); - fdt.Columns.Add(new DataColumn("ID", typeof (int))); - fdt.Columns.Add(new DataColumn("LABEL", typeof (string))); - fdt.Columns.Add(new DataColumn("HALIGN", typeof (int))); - fdt.Columns.Add(new DataColumn("VALIGN", typeof (int))); - - var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4236); - for (var i = 0; i < 3; i++) - { - for (var j = 0; j < 3; j++) - { - var fdr = fdt.NewRow(); - fdr[0] = i*3 + j; - fdr[1] = string.Format("Point({0}, {1})\nID {2}", i, j, i*3 + j); - fdr[2] = j; - fdr[3] = i; - fdr.Geometry = factory.CreatePoint(new Coordinate(j*100, i*100)); - fdt.AddRow(fdr); - } - } - _featureDataTable = fdt; - } - - private static ITheme CreateTheme() - { - return new CustomTheme(StyleBasedOnAlignment); - } - - private static IStyle StyleBasedOnAlignment(FeatureDataRow dr) - { - var style = new LabelStyle - { - HorizontalAlignment = (LabelStyle.HorizontalAlignmentEnum)(int) dr[2], - VerticalAlignment = (LabelStyle.VerticalAlignmentEnum)(int) dr[3], - Rotation = -20, - BackColor = Brushes.Pink, - Halo = new Pen(Brushes.LightBlue, 2) - }; - return style; - } - - [Test] - public void MultiLineCenterAlignedTest() - { - using (var m = new SharpMap.Map(new Size(600, 400))) - { - m.BackColor = Color.SeaShell; - //_featureDataTable.Clear(); - var gfp = new GeometryFeatureProvider(_featureDataTable); - var vl = new VectorLayer("VL", gfp); - var ll = new LabelLayer("MultiLineCenterAligned") {DataSource = gfp}; - ll.Theme = CreateTheme(); - ll.LabelColumn = "LABEL"; - m.Layers.Add(vl); - m.Layers.Add(ll); - - m.ZoomToExtents(); - using (var mapImage = m.GetMap()) - mapImage.Save("MultiLineCenterAligned.png", ImageFormat.Png); - } - } - - [TestFixtureTearDown] - public void FixtureTearDown() - { - _featureDataTable.Dispose(); - } - } -} \ No newline at end of file +using System.Data; +using System.Drawing; +using System.Drawing.Imaging; +using System.Runtime.InteropServices; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering.Thematics; +using SharpMap.Styles; + +namespace UnitTests.Layers +{ + public class LabelLayerTest + { + private FeatureDataTable _featureDataTable; + + [TestFixtureSetUp] + public void FixtureSetUp() + { + var fdt = new FeatureDataTable(); + fdt.Columns.Add(new DataColumn("ID", typeof (int))); + fdt.Columns.Add(new DataColumn("LABEL", typeof (string))); + fdt.Columns.Add(new DataColumn("HALIGN", typeof (int))); + fdt.Columns.Add(new DataColumn("VALIGN", typeof (int))); + + var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4236); + for (var i = 0; i < 3; i++) + { + for (var j = 0; j < 3; j++) + { + var fdr = fdt.NewRow(); + fdr[0] = i*3 + j; + fdr[1] = string.Format("Point({0}, {1})\nID {2}", i, j, i*3 + j); + fdr[2] = j; + fdr[3] = i; + fdr.Geometry = factory.CreatePoint(new Coordinate(j*100, i*100)); + fdt.AddRow(fdr); + } + } + _featureDataTable = fdt; + } + + private static ITheme CreateTheme() + { + return new CustomTheme(StyleBasedOnAlignment); + } + + private static IStyle StyleBasedOnAlignment(FeatureDataRow dr) + { + var style = new LabelStyle + { + HorizontalAlignment = (LabelStyle.HorizontalAlignmentEnum)(int) dr[2], + VerticalAlignment = (LabelStyle.VerticalAlignmentEnum)(int) dr[3], + Rotation = -20, + BackColor = Brushes.Pink, + Halo = new Pen(Brushes.LightBlue, 2) + }; + return style; + } + + [Test] + public void MultiLineCenterAlignedTest() + { + using (var m = new SharpMap.Map(new Size(600, 400))) + { + m.BackColor = Color.SeaShell; + //_featureDataTable.Clear(); + var gfp = new GeometryFeatureProvider(_featureDataTable); + var vl = new VectorLayer("VL", gfp); + var ll = new LabelLayer("MultiLineCenterAligned") {DataSource = gfp}; + ll.Theme = CreateTheme(); + ll.LabelColumn = "LABEL"; + m.Layers.Add(vl); + m.Layers.Add(ll); + + m.ZoomToExtents(); + using (var mapImage = m.GetMap()) + mapImage.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "MultiLineCenterAligned.png"), ImageFormat.Png); + } + } + + [TestFixtureTearDown] + public void FixtureTearDown() + { + _featureDataTable.Dispose(); + } + } +} diff --git a/UnitTests/Layers/TileLayerIssues.cs b/UnitTests/Layers/TileLayerIssues.cs index a3d60ebc..54caa2d7 100644 --- a/UnitTests/Layers/TileLayerIssues.cs +++ b/UnitTests/Layers/TileLayerIssues.cs @@ -1,43 +1,43 @@ -using System.Drawing; -using System.Drawing.Imaging; -using BruTile.Web; -using GeoAPI.Geometries; -using NUnit.Framework; -using SharpMap.Layers; -using BruTile.Predefined; - -namespace UnitTests.Layers -{ - [TestFixture] - public class TileLayerIssues - { - private string _fileCacheRoot; - - [TestFixtureSetUp] - public void TestFixtureSetUp() - { - _fileCacheRoot = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileFileCache"); - } - - [Test, Ignore("Could not reproduce issue"), Description("Map.GetMap() returns incomplete image")] - public void TestIncompleteImage() - { - using (var map = new SharpMap.Map(new Size(2500, 2500))) - { - map.BackColor = Color.Magenta; - var fc = new BruTile.Cache.FileCache(System.IO.Path.Combine(_fileCacheRoot, "BingStaging"), "png"); - var bts = KnownTileSources.Create(KnownTileSource.BingHybridStaging, null, fc); - var tl = new TileLayer(bts, "TileLayer - " + KnownTileSource.BingHybridStaging, Color.Transparent, true); - - map.Layers.Add(tl); - - map.ZoomToBox(new Envelope(829384.331338522, 837200.785470394, 7068020.31417922, 7072526.73926545) - /*new Envelope(-239839.49199841652, 78451.759683380573, -37033.0152981899, 106723.52879865949)*/); - using (var image = map.GetMap()) - { - image.Save("TestIncompleteImage.png", ImageFormat.Png); - } - } - } - } -} \ No newline at end of file +using System.Drawing; +using System.Drawing.Imaging; +using BruTile.Web; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap.Layers; +using BruTile.Predefined; + +namespace UnitTests.Layers +{ + [TestFixture] + public class TileLayerIssues + { + private string _fileCacheRoot; + + [TestFixtureSetUp] + public void TestFixtureSetUp() + { + _fileCacheRoot = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileFileCache"); + } + + [Test, Ignore("Could not reproduce issue"), Description("Map.GetMap() returns incomplete image")] + public void TestIncompleteImage() + { + using (var map = new SharpMap.Map(new Size(2500, 2500))) + { + map.BackColor = Color.Magenta; + var fc = new BruTile.Cache.FileCache(System.IO.Path.Combine(_fileCacheRoot, "BingStaging"), "png"); + var bts = KnownTileSources.Create(KnownTileSource.BingHybridStaging, null, fc); + var tl = new TileLayer(bts, "TileLayer - " + KnownTileSource.BingHybridStaging, Color.Transparent, true); + + map.Layers.Add(tl); + + map.ZoomToBox(new Envelope(829384.331338522, 837200.785470394, 7068020.31417922, 7072526.73926545) + /*new Envelope(-239839.49199841652, 78451.759683380573, -37033.0152981899, 106723.52879865949)*/); + using (var image = map.GetMap()) + image.Save( + System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "TestIncompleteImage.png"), + ImageFormat.Png); + } + } + } +} diff --git a/UnitTests/MapDecorationTest.cs b/UnitTests/MapDecorationTest.cs index c1155000..9a5e2729 100644 --- a/UnitTests/MapDecorationTest.cs +++ b/UnitTests/MapDecorationTest.cs @@ -76,8 +76,9 @@ public void TestMapDecorationTest() NumTicks = 2, Opacity = 1f }); - var bmp = m.GetMap(); - bmp.Save("TestMapDecorationTest.bmp"); + + using (var bmp = m.GetMap()) + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "TestMapDecorationTest.bmp")); } } diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index b64e2294..c1c5f556 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -418,9 +418,9 @@ private void ImageToWorld_Rotation(float deg) map.ZoomToBox(lineString.EnvelopeInternal); - string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.bmp"; + string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.png"; using (var img = map.GetMap(96)) - img.Save(fn,System.Drawing.Imaging.ImageFormat.Bmp); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn),System.Drawing.Imaging.ImageFormat.Png); map.Dispose(); } @@ -582,7 +582,7 @@ public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, d var fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_old.png"; using (var img = map.GetMap(96)) - img.Save(fn, System.Drawing.Imaging.ImageFormat.Bmp); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn), System.Drawing.Imaging.ImageFormat.Bmp); // reset view map.Center = new Coordinate(0, 0); @@ -591,7 +591,7 @@ public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, d // map.ZoomToBox(env, true); // fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_new.png"; // using (var img = map.GetMap(96)) -// img.Save(fn, System.Drawing.Imaging.ImageFormat.Bmp); +// img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn), System.Drawing.Imaging.ImageFormat.Bmp); } map.Dispose(); diff --git a/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs index 35e15744..4cff4578 100644 --- a/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs +++ b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs @@ -26,12 +26,10 @@ public class ScaleBarTests //private readonly List _testLatitudes = new List {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85}; private readonly List _testLatitudes = new List {0, 10, 20, 30, 40, 50, 60, 70, 80}; - [TestFixtureSetUp] public void SetupMap() { - System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "SharpMap")); - System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "BruTileCache", "Osm")); + //System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "BruTileCache", "Osm")); var files = System.IO.Directory.GetFiles(Path.Combine(Path.GetTempPath(), "SharpMap")); foreach (var file in files) @@ -70,16 +68,16 @@ public void SetupMap() _map.Layers.Add(lyr); - // Add bru-tile map background - var cacheFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileCache", "Osm"); - var lyrBruTile = new TileLayer( - BruTile.Predefined.KnownTileSources.Create(BruTile.Predefined.KnownTileSource.OpenStreetMap), - "Tiles", Color.Transparent, true, cacheFolder) - { - SRID = 3857, - TargetSRID = _map.SRID - }; - _map.BackgroundLayer.Add(lyrBruTile); + // Add bru-tile map background +// var cacheFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileCache", "Osm"); +// var lyrBruTile = new TileLayer( +// BruTile.Predefined.KnownTileSources.Create(BruTile.Predefined.KnownTileSource.OpenStreetMap), +// "Tiles", Color.Transparent, true, cacheFolder) +// { +// SRID = 3857, +// TargetSRID = _map.SRID +// }; +// _map.BackgroundLayer.Add(lyrBruTile); var scaleBar = new SharpMap.Rendering.Decoration.ScaleBar.ScaleBar() { @@ -1263,12 +1261,10 @@ private void GenerateScaleBarImages(string srDescr, int? centerLat, int interval _map.ZoomToBox(box); // generate image - var img = _map.GetMap(); var strLat = (centerLat.HasValue) ? $"Lat_{centerLat:D2}" : "AllPoints"; - img.Save( - Path.Combine(Path.GetTempPath(), "SharpMap", - $"ScaleBarTest_{srDescr}_{strLat}_Interval_{interval:D5}.bmp"), - System.Drawing.Imaging.ImageFormat.Bmp); + using (var img = _map.GetMap()) + img.Save(Path.Combine(UnitTestsFixture.GetImageDirectory(this), $"ScaleBarTest_{srDescr}_{strLat}_Interval_{interval:D5}.png"), + System.Drawing.Imaging.ImageFormat.Png); } } } diff --git a/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs b/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs index edbe0429..584be22e 100644 --- a/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs +++ b/UnitTests/Rendering/GroupStyle/GroupStyleTests.cs @@ -1,12 +1,13 @@ -using NUnit.Framework; -using System.Drawing; -using SharpMap.Layers; -using SharpMap; - -namespace UnitTests.Rendering.GroupStyle +using NUnit.Framework; +using System.Drawing; +using System.Drawing.Imaging; +using SharpMap.Layers; +using SharpMap; + +namespace UnitTests.Rendering.GroupStyle { - [TestFixture] - public class GroupStyleTests + [TestFixture] + public class GroupStyleTests { [Test] public void TestAddRemove() @@ -33,8 +34,8 @@ public void TestAddRemove() } [Test] -#if LINUX - [Ignore("Known to fail")] +#if LINUX + [Ignore("Known to fail")] #endif public void TestRender() { @@ -51,8 +52,8 @@ public void TestRender() { Enabled = true, PointColor = Brushes.White, - PointSize = 2, - + PointSize = 2, + }; style.AddStyle(vStyle); @@ -70,7 +71,7 @@ public void TestRender() m.Layers.Add(vLay); var img = m.GetMap(); - img.Save(@"c:\\temp\ren.png"); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "render.png"), ImageFormat.Png); Bitmap bmp = img as Bitmap; Color c1 = bmp.GetPixel(5, 5); @@ -86,6 +87,6 @@ public void TestRender() img.Dispose(); m.Dispose(); - } - } -} + } + } +} diff --git a/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs index b18aaef0..f75d8d8a 100644 --- a/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/LineSymbolizerTest.cs @@ -1,235 +1,235 @@ -namespace UnitTests.Rendering.Symbolizer -{ - public class LineSymbolizerTest - { - static LineSymbolizerTest() - { - GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); - } - - private string GetTestFile() - { - return System.IO.Path.Combine("TestData", "roads_ugl.shp"); - } - - [NUnit.Framework.Test] - public void TestBasicLineSymbolizer() - { - var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); - var l = new SharpMap.Layers.VectorLayer("roads", p); - //l.Style.Outline = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 5); - l.Style.Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 1); - l.Style.EnableOutline = false; - var m = new SharpMap.Map(new System.Drawing.Size(1440,1080)) {BackColor = System.Drawing.Color.Cornsilk}; - m.Layers.Add(l); - - m.ZoomToExtents(); - - var sw = new System.Diagnostics.Stopwatch(); - sw.Start(); - m.GetMap(); - - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); - sw.Reset(); - sw.Start(); - var bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("NDSRoads1.bmp"); - - - var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); - //cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 5) }); - cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 1) }); - - l.Style.LineSymbolizer = cls; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("NDSRoads2.bmp"); - - } - - [NUnit.Framework.Test, NUnit.Framework.Ignore("DataSet inapropriate (too large)")] - public void TestWarpedLineSymbolizer() - { - var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); - - var l = new SharpMap.Layers.VectorLayer("roads", p); - - var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); - cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler - {Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 2)}); - - var wls = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetGreaterSeries(3, 3), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1) - , Interval = 20 - }; - cls.LineSymbolizeHandlers.Add(wls); - l.Style.LineSymbolizer = cls; - - var m = new SharpMap.Map(new System.Drawing.Size(720, 540)) {BackColor = System.Drawing.Color.Cornsilk}; - m.Layers.Add(l); - - m.ZoomToExtents(); - - var sw = new System.Diagnostics.Stopwatch(); - - sw.Start(); - var bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads1.bmp"); - - cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetTriangle(4, 0), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), - Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) - ,Interval = 10 - }; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads2-0.bmp"); - - cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetTriangle(4, 1), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), - Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) - , - Interval = 10 - }; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads2-1.bmp"); - cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetTriangle(4, 2), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), - Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) - , - Interval = 10 - }; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads2-2.bmp"); - - cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetTriangle(4, 3), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), - Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) - , - Interval = 10 - }; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads2-3.bmp"); - - - //cls.LineSymbolizeHandlers[0] = cls.LineSymbolizeHandlers[1]; - cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer.GetZigZag(4, 4), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), - //Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) - }; - sw.Reset(); sw.Start(); - bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads3.bmp"); - } - - [NUnit.Framework.Test] - public void TestCachedLineSymbolizerInTheme() - { - var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); - - var l = new SharpMap.Layers.VectorLayer("roads", p); - var theme = new ClsTheme(l.Style); - l.Theme = theme; - - var m = new SharpMap.Map(new System.Drawing.Size(720, 540)) { BackColor = System.Drawing.Color.Cornsilk }; - m.Layers.Add(l); - - m.ZoomToExtents(); - - var sw = new System.Diagnostics.Stopwatch(); - - sw.Start(); - var bmp = m.GetMap(); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); - bmp.Save("AurichRoads1Theme.bmp"); - } - - internal class ClsTheme : SharpMap.Rendering.Thematics.ITheme - { - private SharpMap.Styles.VectorStyle _style; - - public ClsTheme(SharpMap.Styles.VectorStyle style) - { - _style = style; - } - - #region Implementation of ITheme - - /// - /// Returns the style based on a feature - /// - /// Set of attribute values to calculate the from - /// The style - public SharpMap.Styles.IStyle GetStyle(SharpMap.Data.FeatureDataRow attribute) - { - var res = _style; - - var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); - cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 2) }); - - var wls = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander - { - Pattern = - SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. - GetGreaterSeries(3, 3), - Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1) - , - Interval = 20 - - }; - cls.LineSymbolizeHandlers.Add(wls); - cls.ImmediateMode = true; - - res.LineSymbolizer = cls; - - return res; - } - - #endregion - } - } -} +namespace UnitTests.Rendering.Symbolizer +{ + public class LineSymbolizerTest + { + static LineSymbolizerTest() + { + GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices(); + } + + private string GetTestFile() + { + return System.IO.Path.Combine("TestData", "roads_ugl.shp"); + } + + [NUnit.Framework.Test] + public void TestBasicLineSymbolizer() + { + var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); + var l = new SharpMap.Layers.VectorLayer("roads", p); + //l.Style.Outline = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 5); + l.Style.Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 1); + l.Style.EnableOutline = false; + var m = new SharpMap.Map(new System.Drawing.Size(1440,1080)) {BackColor = System.Drawing.Color.Cornsilk}; + m.Layers.Add(l); + + m.ZoomToExtents(); + + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + m.GetMap(); + + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); + sw.Reset(); + sw.Start(); + var bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering old method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "NDSRoads1.bmp")); + + + var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); + //cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 5) }); + cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 1) }); + + l.Style.LineSymbolizer = cls; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "NDSRoads2.bmp")); + + } + + [NUnit.Framework.Test, NUnit.Framework.Ignore("DataSet inapropriate (too large)")] + public void TestWarpedLineSymbolizer() + { + var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); + + var l = new SharpMap.Layers.VectorLayer("roads", p); + + var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); + cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler + {Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 2)}); + + var wls = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetGreaterSeries(3, 3), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1) + , Interval = 20 + }; + cls.LineSymbolizeHandlers.Add(wls); + l.Style.LineSymbolizer = cls; + + var m = new SharpMap.Map(new System.Drawing.Size(720, 540)) {BackColor = System.Drawing.Color.Cornsilk}; + m.Layers.Add(l); + + m.ZoomToExtents(); + + var sw = new System.Diagnostics.Stopwatch(); + + sw.Start(); + var bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads1.bmp")); + + cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetTriangle(4, 0), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), + Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) + ,Interval = 10 + }; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads2-0.bmp")); + + cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetTriangle(4, 1), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), + Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) + , + Interval = 10 + }; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this),"AurichRoads2-1.bmp")); + cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetTriangle(4, 2), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), + Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) + , + Interval = 10 + }; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads2-2.bmp")); + + cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetTriangle(4, 3), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), + Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) + , + Interval = 10 + }; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads2-3.bmp")); + + + //cls.LineSymbolizeHandlers[0] = cls.LineSymbolizeHandlers[1]; + cls.LineSymbolizeHandlers[1] = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer.GetZigZag(4, 4), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1), + //Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Firebrick) + }; + sw.Reset(); sw.Start(); + bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads3.bmp")); + } + + [NUnit.Framework.Test] + public void TestCachedLineSymbolizerInTheme() + { + var p = new SharpMap.Data.Providers.ShapeFile(GetTestFile(), false); + + var l = new SharpMap.Layers.VectorLayer("roads", p); + var theme = new ClsTheme(l.Style); + l.Theme = theme; + + var m = new SharpMap.Map(new System.Drawing.Size(720, 540)) { BackColor = System.Drawing.Color.Cornsilk }; + m.Layers.Add(l); + + m.ZoomToExtents(); + + var sw = new System.Diagnostics.Stopwatch(); + + sw.Start(); + var bmp = m.GetMap(); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method: {0}ms", sw.ElapsedMilliseconds)); + bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "AurichRoads1Theme.bmp")); + } + + internal class ClsTheme : SharpMap.Rendering.Thematics.ITheme + { + private SharpMap.Styles.VectorStyle _style; + + public ClsTheme(SharpMap.Styles.VectorStyle style) + { + _style = style; + } + + #region Implementation of ITheme + + /// + /// Returns the style based on a feature + /// + /// Set of attribute values to calculate the from + /// The style + public SharpMap.Styles.IStyle GetStyle(SharpMap.Data.FeatureDataRow attribute) + { + var res = _style; + + var cls = new SharpMap.Rendering.Symbolizer.CachedLineSymbolizer(); + cls.LineSymbolizeHandlers.Add(new SharpMap.Rendering.Symbolizer.PlainLineSymbolizeHandler { Line = new System.Drawing.Pen(System.Drawing.Color.Gold, 2) }); + + var wls = new SharpMap.Rendering.Symbolizer.WarpedLineSymbolizeHander + { + Pattern = + SharpMap.Rendering.Symbolizer.WarpedLineSymbolizer. + GetGreaterSeries(3, 3), + Line = new System.Drawing.Pen(System.Drawing.Color.Firebrick, 1) + , + Interval = 20 + + }; + cls.LineSymbolizeHandlers.Add(wls); + cls.ImmediateMode = true; + + res.LineSymbolizer = cls; + + return res; + } + + #endregion + } + } +} diff --git a/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs index 510ba159..9bc1f762 100644 --- a/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/PointSymbolizerTest.cs @@ -1,176 +1,176 @@ -namespace UnitTests.Rendering.Symbolizer -{ - /// - /// Test implemented PointSymbolizers - /// - public class PointSymbolizerTest - { - [NUnit.Framework.Test] - public void TestCharacterPointSymbolizer() - { - var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( - TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); - var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); - var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); - var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer - { - Halo = 1, - HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Wheat), - //Font = new System.Drawing.Font("Arial", 12), - CharacterIndex = 0xcc, - }; - layer.Style.PointSymbolizer = cps; - var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); - - map.Layers.Add(layer); - map.ZoomToExtents(); - map.GetMap().Save("CharacterPointSymbolizer1.bmp"); - - cps.Rotation = -30; - cps.Offset = new System.Drawing.PointF(4, 4); - map.GetMap().Save("CharacterPointSymbolizer2.bmp"); - - cps.Font = new System.Drawing.Font("Arial", 12); - cps.Text = "ABC"; - cps.Offset = System.Drawing.PointF.Empty; - cps.Rotation = -90; - map.GetMap().Save("CharacterPointSymbolizer3.bmp"); - } - - - [NUnit.Framework.Test] - public void TestPathPointSymbolizer() - { - var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( - TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); - var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); - var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); - var pps = - SharpMap.Rendering.Symbolizer.PathPointSymbolizer.CreateSquare(new System.Drawing.Pen(System.Drawing.Color.Red, 2), - new System.Drawing.SolidBrush( - System.Drawing.Color.DodgerBlue), 20); - layer.Style.PointSymbolizer = pps; - var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); - map.Layers.Add(layer); - map.ZoomToExtents(); - map.GetMap().Save("PathPointSymbolizer1.bmp"); - - pps.Rotation = -30; - map.GetMap().Save("PathPointSymbolizer2.bmp"); - - pps.Rotation = 0f; - pps.Offset = new System.Drawing.PointF(4, 4); - map.GetMap().Save("PathPointSymbolizer3.bmp"); - - var gpTriangle1 = new System.Drawing.Drawing2D.GraphicsPath(); - gpTriangle1.AddPolygon(new [] { new System.Drawing.Point(0, 0), new System.Drawing.Point(5, 10), new System.Drawing.Point(10, 0), new System.Drawing.Point(0, 0), }); - var gpTriangle2 = new System.Drawing.Drawing2D.GraphicsPath(); - gpTriangle2.AddPolygon(new[] { new System.Drawing.Point(0, 0), new System.Drawing.Point(-5, -10), new System.Drawing.Point(-10, 0), new System.Drawing.Point(0, 0), }); - pps = new - SharpMap.Rendering.Symbolizer.PathPointSymbolizer(new[] - { - new SharpMap.Rendering.Symbolizer.PathPointSymbolizer.PathDefinition - { - Path = gpTriangle1, - Line = - new System.Drawing.Pen( - System.Drawing.Color.Red, 2), - Fill = - new System.Drawing.SolidBrush( - System.Drawing.Color.DodgerBlue) - }, - new SharpMap.Rendering.Symbolizer.PathPointSymbolizer.PathDefinition - { - Path = gpTriangle2, - Line = - new System.Drawing.Pen( - System.Drawing.Color.DodgerBlue, 2), - Fill = - new System.Drawing.SolidBrush( - System.Drawing.Color.Red) - } - - }){ Rotation = 45 }; - - layer.Style.PointSymbolizer = pps; - map.GetMap().Save("PathPointSymbolizer4.bmp"); - pps.Rotation = 180; - map.GetMap().Save("PathPointSymbolizer5.bmp"); - - } - - [NUnit.Framework.Test] - public void TestRasterPointSymbolizer() - { - var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( - TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); - var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); - var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); - - - var wmnStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("UnitTests.Resources.Women.png"); - var wmnBmp = new System.Drawing.Bitmap(wmnStream); - - var rps = - new SharpMap.Rendering.Symbolizer.RasterPointSymbolizer {Symbol = wmnBmp}; - - layer.Style.PointSymbolizer = rps; - var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); - map.Layers.Add(layer); - map.ZoomToExtents(); - map.GetMap().Save("RasterPointSymbolizer1.bmp"); - - rps.Rotation = 45; - map.GetMap().Save("RasterPointSymbolizer2.bmp"); - rps.Rotation = 0; - - var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer - { - Halo = 1, - HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.WhiteSmoke), - Foreground = new System.Drawing.SolidBrush(System.Drawing.Color.Black), - Font = new System.Drawing.Font("Arial", 12), - Text = "Anne", - Offset = new System.Drawing.PointF(0, rps.Size.Height*0.5f) - - }; - - var lps = new SharpMap.Rendering.Symbolizer.ListPointSymbolizer { rps, cps }; - - layer.Style.PointSymbolizer = lps; - map.Layers.Add(layer); - map.ZoomToExtents(); - map.GetMap().Save("RasterPointSymbolizer3.bmp"); - } - - [NUnit.Framework.Test] - public void TestListPointSymbolizer() - { - var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( - TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); - var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); - var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); - var pps = - SharpMap.Rendering.Symbolizer.PathPointSymbolizer.CreateSquare(new System.Drawing.Pen(System.Drawing.Color.Red, 2), - new System.Drawing.SolidBrush( - System.Drawing.Color.DodgerBlue), 20); - - var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer - { - Halo = 1, - HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.WhiteSmoke), - Foreground = new System.Drawing.SolidBrush(System.Drawing.Color.Black), - Font = new System.Drawing.Font("Arial", 12), - CharacterIndex = 65 - }; - - var lps = new SharpMap.Rendering.Symbolizer.ListPointSymbolizer { pps, cps }; - - layer.Style.PointSymbolizer = lps; - var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); - map.Layers.Add(layer); - map.ZoomToExtents(); - map.GetMap().Save("ListPointSymbolizer1.bmp"); - } - } -} +namespace UnitTests.Rendering.Symbolizer +{ + /// + /// Test implemented PointSymbolizers + /// + public class PointSymbolizerTest + { + [NUnit.Framework.Test] + public void TestCharacterPointSymbolizer() + { + var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( + TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); + var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); + var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); + var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer + { + Halo = 1, + HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Wheat), + //Font = new System.Drawing.Font("Arial", 12), + CharacterIndex = 0xcc, + }; + layer.Style.PointSymbolizer = cps; + var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); + + map.Layers.Add(layer); + map.ZoomToExtents(); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "CharacterPointSymbolizer1.bmp")); + + cps.Rotation = -30; + cps.Offset = new System.Drawing.PointF(4, 4); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "CharacterPointSymbolizer2.bmp")); + + cps.Font = new System.Drawing.Font("Arial", 12); + cps.Text = "ABC"; + cps.Offset = System.Drawing.PointF.Empty; + cps.Rotation = -90; + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "CharacterPointSymbolizer3.bmp")); + } + + + [NUnit.Framework.Test] + public void TestPathPointSymbolizer() + { + var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( + TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); + var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); + var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); + var pps = + SharpMap.Rendering.Symbolizer.PathPointSymbolizer.CreateSquare(new System.Drawing.Pen(System.Drawing.Color.Red, 2), + new System.Drawing.SolidBrush( + System.Drawing.Color.DodgerBlue), 20); + layer.Style.PointSymbolizer = pps; + var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); + map.Layers.Add(layer); + map.ZoomToExtents(); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PathPointSymbolizer1.bmp")); + + pps.Rotation = -30; + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PathPointSymbolizer2.bmp")); + + pps.Rotation = 0f; + pps.Offset = new System.Drawing.PointF(4, 4); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PathPointSymbolizer3.bmp")); + + var gpTriangle1 = new System.Drawing.Drawing2D.GraphicsPath(); + gpTriangle1.AddPolygon(new [] { new System.Drawing.Point(0, 0), new System.Drawing.Point(5, 10), new System.Drawing.Point(10, 0), new System.Drawing.Point(0, 0), }); + var gpTriangle2 = new System.Drawing.Drawing2D.GraphicsPath(); + gpTriangle2.AddPolygon(new[] { new System.Drawing.Point(0, 0), new System.Drawing.Point(-5, -10), new System.Drawing.Point(-10, 0), new System.Drawing.Point(0, 0), }); + pps = new + SharpMap.Rendering.Symbolizer.PathPointSymbolizer(new[] + { + new SharpMap.Rendering.Symbolizer.PathPointSymbolizer.PathDefinition + { + Path = gpTriangle1, + Line = + new System.Drawing.Pen( + System.Drawing.Color.Red, 2), + Fill = + new System.Drawing.SolidBrush( + System.Drawing.Color.DodgerBlue) + }, + new SharpMap.Rendering.Symbolizer.PathPointSymbolizer.PathDefinition + { + Path = gpTriangle2, + Line = + new System.Drawing.Pen( + System.Drawing.Color.DodgerBlue, 2), + Fill = + new System.Drawing.SolidBrush( + System.Drawing.Color.Red) + } + + }){ Rotation = 45 }; + + layer.Style.PointSymbolizer = pps; + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PathPointSymbolizer4.bmp")); + pps.Rotation = 180; + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PathPointSymbolizer5.bmp")); + + } + + [NUnit.Framework.Test] + public void TestRasterPointSymbolizer() + { + var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( + TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); + var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); + var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); + + + var wmnStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("UnitTests.Resources.Women.png"); + var wmnBmp = new System.Drawing.Bitmap(wmnStream); + + var rps = + new SharpMap.Rendering.Symbolizer.RasterPointSymbolizer {Symbol = wmnBmp}; + + layer.Style.PointSymbolizer = rps; + var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); + map.Layers.Add(layer); + map.ZoomToExtents(); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "RasterPointSymbolizer1.bmp")); + + rps.Rotation = 45; + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "RasterPointSymbolizer2.bmp")); + rps.Rotation = 0; + + var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer + { + Halo = 1, + HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.WhiteSmoke), + Foreground = new System.Drawing.SolidBrush(System.Drawing.Color.Black), + Font = new System.Drawing.Font("Arial", 12), + Text = "Anne", + Offset = new System.Drawing.PointF(0, rps.Size.Height*0.5f) + + }; + + var lps = new SharpMap.Rendering.Symbolizer.ListPointSymbolizer { rps, cps }; + + layer.Style.PointSymbolizer = lps; + map.Layers.Add(layer); + map.ZoomToExtents(); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "RasterPointSymbolizer3.bmp")); + } + + [NUnit.Framework.Test] + public void TestListPointSymbolizer() + { + var fdt = TestData.CreatingData.CreatePointFeatureDataTableFromArrays( + TestData.CreatingData.GetRandomOrdinates(50, -180, 180), TestData.CreatingData.GetRandomOrdinates(50, -90, 90), null); + var geometryFeatureProvider = new SharpMap.Data.Providers.GeometryFeatureProvider(fdt); + var layer = new SharpMap.Layers.VectorLayer("randompoints", geometryFeatureProvider); + var pps = + SharpMap.Rendering.Symbolizer.PathPointSymbolizer.CreateSquare(new System.Drawing.Pen(System.Drawing.Color.Red, 2), + new System.Drawing.SolidBrush( + System.Drawing.Color.DodgerBlue), 20); + + var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer + { + Halo = 1, + HaloBrush = new System.Drawing.SolidBrush(System.Drawing.Color.WhiteSmoke), + Foreground = new System.Drawing.SolidBrush(System.Drawing.Color.Black), + Font = new System.Drawing.Font("Arial", 12), + CharacterIndex = 65 + }; + + var lps = new SharpMap.Rendering.Symbolizer.ListPointSymbolizer { pps, cps }; + + layer.Style.PointSymbolizer = lps; + var map = new SharpMap.Map(new System.Drawing.Size(720, 360)); + map.Layers.Add(layer); + map.ZoomToExtents(); + map.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "ListPointSymbolizer1.bmp")); + } + } +} diff --git a/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs index 58791814..bb48653c 100644 --- a/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/PolygonSymbolizerTest.cs @@ -1,80 +1,80 @@ -namespace UnitTests.Rendering.Symbolizer -{ - public class PolygonSymbolizerTest - { - private class ModifiedBasicPolygonSymbolizer : SharpMap.Rendering.Symbolizer.BasicPolygonSymbolizer - { - private System.Drawing.Point _oldRenderOrigin; - - public override void Begin(System.Drawing.Graphics g, SharpMap.MapViewport map, int aproximateNumberOfGeometries) - { - base.Begin(g, map, aproximateNumberOfGeometries); - _oldRenderOrigin = g.RenderingOrigin; - } - protected override void OnRenderInternal(SharpMap.MapViewport map, GeoAPI.Geometries.IPolygon polygon, System.Drawing.Graphics g) - { - var pt = polygon.Centroid; - g.RenderingOrigin = - System.Drawing.Point.Truncate(map.WorldToImage(pt.Coordinate)); - base.OnRenderInternal(map, polygon, g); - } - public override void End(System.Drawing.Graphics g, SharpMap.MapViewport map) - { - g.RenderingOrigin = _oldRenderOrigin; - } - - } - - [NUnit.Framework.TestCase("..\\..\\Examples\\WinFormSamples\\GeoData\\World\\countries.shp")] - public void TestPlainPolygonSymbolizer(string filePath) - { - filePath = filePath.Replace("\\", new string(System.IO.Path.DirectorySeparatorChar, 1)); - if (!System.IO.File.Exists(filePath)) - throw new NUnit.Framework.IgnoreException($"'{filePath}' not found"); - - var provider = new SharpMap.Data.Providers.ShapeFile(filePath, true); - var l = new SharpMap.Layers.Symbolizer.PolygonalVectorLayer("Countries", provider); - l.Symbolizer = new ModifiedBasicPolygonSymbolizer - { - Fill = new System.Drawing.Drawing2D.HatchBrush( - System.Drawing.Drawing2D.HatchStyle.WideDownwardDiagonal, - System.Drawing.Color.Red /*, - System.Drawing.Color.LightPink*/), - UseClipping = false, - //Outline = System.Drawing.Pens.AliceBlue - }; - - var m = new SharpMap.Map(new System.Drawing.Size(1440, 1080)) { BackColor = System.Drawing.Color.Cornsilk }; - m.Layers.Add(l); - - m.ZoomToExtents(); - - var sw = new System.Diagnostics.Stopwatch(); - var img = m.GetMap(); - - sw.Start(); - img = m.GetMap(); - img.Save("PolygonSymbolizer-1.bmp", System.Drawing.Imaging.ImageFormat.Bmp); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); - - l.Symbolizer = new SharpMap.Rendering.Symbolizer.BasicPolygonSymbolizer() - { - Fill = new System.Drawing.Drawing2D.HatchBrush( - System.Drawing.Drawing2D.HatchStyle.WideDownwardDiagonal, - System.Drawing.Color.Red/*, - System.Drawing.Color.LightPink*/), - UseClipping = false, - //Outline = System.Drawing.Pens.AliceBlue - }; - - sw.Reset(); sw.Start(); - img = m.GetMap(); - img.Save("PolygonSymbolizer-2.bmp", System.Drawing.Imaging.ImageFormat.Bmp); - sw.Stop(); - System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); - - } - } - -} +namespace UnitTests.Rendering.Symbolizer +{ + public class PolygonSymbolizerTest + { + private class ModifiedBasicPolygonSymbolizer : SharpMap.Rendering.Symbolizer.BasicPolygonSymbolizer + { + private System.Drawing.Point _oldRenderOrigin; + + public override void Begin(System.Drawing.Graphics g, SharpMap.MapViewport map, int aproximateNumberOfGeometries) + { + base.Begin(g, map, aproximateNumberOfGeometries); + _oldRenderOrigin = g.RenderingOrigin; + } + protected override void OnRenderInternal(SharpMap.MapViewport map, GeoAPI.Geometries.IPolygon polygon, System.Drawing.Graphics g) + { + var pt = polygon.Centroid; + g.RenderingOrigin = + System.Drawing.Point.Truncate(map.WorldToImage(pt.Coordinate)); + base.OnRenderInternal(map, polygon, g); + } + public override void End(System.Drawing.Graphics g, SharpMap.MapViewport map) + { + g.RenderingOrigin = _oldRenderOrigin; + } + + } + + [NUnit.Framework.TestCase("..\\..\\Examples\\WinFormSamples\\GeoData\\World\\countries.shp")] + public void TestPlainPolygonSymbolizer(string filePath) + { + filePath = filePath.Replace("\\", new string(System.IO.Path.DirectorySeparatorChar, 1)); + if (!System.IO.File.Exists(filePath)) + throw new NUnit.Framework.IgnoreException($"'{filePath}' not found"); + + var provider = new SharpMap.Data.Providers.ShapeFile(filePath, true); + var l = new SharpMap.Layers.Symbolizer.PolygonalVectorLayer("Countries", provider); + l.Symbolizer = new ModifiedBasicPolygonSymbolizer + { + Fill = new System.Drawing.Drawing2D.HatchBrush( + System.Drawing.Drawing2D.HatchStyle.WideDownwardDiagonal, + System.Drawing.Color.Red /*, + System.Drawing.Color.LightPink*/), + UseClipping = false, + //Outline = System.Drawing.Pens.AliceBlue + }; + + var m = new SharpMap.Map(new System.Drawing.Size(1440, 1080)) { BackColor = System.Drawing.Color.Cornsilk }; + m.Layers.Add(l); + + m.ZoomToExtents(); + + var sw = new System.Diagnostics.Stopwatch(); + var img = m.GetMap(); + + sw.Start(); + img = m.GetMap(); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "PolygonSymbolizer-1.bmp"), System.Drawing.Imaging.ImageFormat.Bmp); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); + + l.Symbolizer = new SharpMap.Rendering.Symbolizer.BasicPolygonSymbolizer() + { + Fill = new System.Drawing.Drawing2D.HatchBrush( + System.Drawing.Drawing2D.HatchStyle.WideDownwardDiagonal, + System.Drawing.Color.Red/*, + System.Drawing.Color.LightPink*/), + UseClipping = false, + //Outline = System.Drawing.Pens.AliceBlue + }; + + sw.Reset(); sw.Start(); + img = m.GetMap(); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this),"PolygonSymbolizer-2.bmp"), System.Drawing.Imaging.ImageFormat.Bmp); + sw.Stop(); + System.Diagnostics.Trace.WriteLine(string.Format("Rendering new method:{0}ms", sw.ElapsedMilliseconds)); + + } + } + +} diff --git a/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs index 8df99fd6..d3ebd4fc 100644 --- a/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs +++ b/UnitTests/Rendering/Symbolizer/RasterPointSymbolizerTest.cs @@ -21,7 +21,7 @@ public void TestRasterPointSymbolizerScaleRotn() var m = CreateMap(); m.ZoomToExtents(); var img = m.GetMap(); - img.Save("RasterPointSymbolizer.bmp", System.Drawing.Imaging.ImageFormat.Bmp); + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this),"RasterPointSymbolizer.png"), System.Drawing.Imaging.ImageFormat.Png); } private SharpMap.Map CreateMap() diff --git a/UnitTests/Serialization/MapTest.cs b/UnitTests/Serialization/MapTest.cs index 1d346249..7a4436c4 100644 --- a/UnitTests/Serialization/MapTest.cs +++ b/UnitTests/Serialization/MapTest.cs @@ -1,130 +1,130 @@ -#if !LINUX -using System; -using System.Drawing; -using System.IO; -using BruTile.Predefined; -using BruTile.Web; -using GeoAPI.CoordinateSystems.Transformations; -using GeoAPI.Geometries; -using NUnit.Framework; -using NetTopologySuite.Geometries; -using SharpMap; -using SharpMap.Data.Providers; -using SharpMap.Layers; -using SharpMap.Styles; - -namespace UnitTests.Serialization -{ - public class MapTest : BaseSerializationTest - { - private readonly Size _mapSize = new Size(1200, 800); - - [Test, Description("Just a line")] - public void TestMap1() - { - var m = new Map(_mapSize); - m.Layers.Add(new VectorLayer("tmp", new GeometryProvider( - new LineString(new [] {new Coordinate(0, 0), new Coordinate(10, 10), })))); - - m.ZoomToExtents(); - - Map mD = null; - Assert.DoesNotThrow(()=>mD=SandD(m, GetFormatter())); - - TestMaps("Test1", m, mD); - } - - private static void TestMaps(string name, Map m, Map mD) - { - Assert.NotNull(mD); - - Assert.AreEqual(m.Size, mD.Size); - Assert.AreEqual(m.Layers.Count, mD.Layers.Count); - var c = new LayerTest.VectorLayerEqualityComparer(); - for (var i = 0; i < m.Layers.Count; i++) - { - Assert.IsTrue(c.Equals((VectorLayer)m.Layers[i], - (VectorLayer)mD.Layers[i]), - "Layer {0}, '{1}' Differs at {2}", - i, m.Layers[i].LayerName, string.Join(", ", c.DifferAt)); - } - - Assert.AreEqual(m.PixelAspectRatio, mD.PixelAspectRatio); - Assert.AreEqual(m.PixelHeight, mD.PixelHeight); - Assert.AreEqual(m.PixelWidth, mD.PixelWidth); - Assert.AreEqual(m.PixelSize, mD.PixelSize); - - Assert.AreEqual(m.BackColor, mD.BackColor); - Assert.IsTrue(m.Center.Equals(mD.Center)); - Assert.IsTrue(m.GetExtents().Equals(mD.GetExtents())); - Assert.IsTrue(m.Envelope.Equals(mD.Envelope)); - - Assert.AreEqual(m.Decorations.Count, mD.Decorations.Count); - Assert.AreEqual(m.SRID, mD.SRID); - Assert.AreEqual(m.Zoom, mD.Zoom); - - Assert.DoesNotThrow(() => m.GetMap().Save(name + "-S.bmp")); - Assert.DoesNotThrow(() => mD.GetMap().Save(name + "-D.bmp")); - } - - - - [Test, Description("MapQuest base map, OSM of Aurich, randomly styled")] - public void TestMap2() - { - var m = new Map(_mapSize); - m.BackgroundLayer.Add(new TileLayer(KnownTileSources.Create(KnownTileSource.MapQuest), "MapQuest")); - - string cn = $"Data Source={Path.Combine("TestData", "osm_aurich.sqlite")};"; - - var ct = Wgs84ToWebMercator; - //Env[7,45731445821406 : 7,53454260528903, 53,4342695512313 : 53,478793942147] - var box = new Envelope(7.45731445821406, 7.53454260528903, 53.4342695512313, 53.478793942147); - var box3857 = GeometryTransform.TransformBox(box, ct.MathTransform); - - m.ZoomToBox(box3857); - - foreach (var msp in ManagedSpatiaLite.GetSpatialTables(cn)) - { - var l = new VectorLayer(msp.Table, msp); - switch (msp.Table.Substring(0, 2).ToLower()) - { - case "pt": - l.Style = VectorStyle.CreateRandomPuntalStyle(); - break; - case "ln": - l.Style = VectorStyle.CreateRandomLinealStyle(); - break; - case "pg": - l.Style = VectorStyle.CreateRandomPolygonalStyle(); - break; - default: - l.Style = VectorStyle.CreateRandomStyle(); - break; - } - - l.CoordinateTransformation = ct; - m.Layers.Add(l); - } - - var f = GetFormatter(); - //BruTile.Utility.AddBruTileSurrogates(GetFormatter()); - - Map mD = null; - Assert.DoesNotThrow(() => mD = SandD(m, f)); - - TestMaps("Test2", m, mD); - } - - private static ICoordinateTransformation Wgs84ToWebMercator - { - get - { - return new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory() - .CreateFromCoordinateSystems(ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, - ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator); - } - } - } -} -#endif \ No newline at end of file +#if !LINUX +using System; +using System.Drawing; +using System.IO; +using BruTile.Predefined; +using BruTile.Web; +using GeoAPI.CoordinateSystems.Transformations; +using GeoAPI.Geometries; +using NUnit.Framework; +using NetTopologySuite.Geometries; +using SharpMap; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Styles; + +namespace UnitTests.Serialization +{ + public class MapTest : BaseSerializationTest + { + private readonly Size _mapSize = new Size(1200, 800); + + [Test, Description("Just a line")] + public void TestMap1() + { + var m = new Map(_mapSize); + m.Layers.Add(new VectorLayer("tmp", new GeometryProvider( + new LineString(new [] {new Coordinate(0, 0), new Coordinate(10, 10), })))); + + m.ZoomToExtents(); + + Map mD = null; + Assert.DoesNotThrow(()=>mD=SandD(m, GetFormatter())); + + TestMaps("Test1", m, mD); + } + + private static void TestMaps(string name, Map m, Map mD) + { + Assert.NotNull(mD); + + Assert.AreEqual(m.Size, mD.Size); + Assert.AreEqual(m.Layers.Count, mD.Layers.Count); + var c = new LayerTest.VectorLayerEqualityComparer(); + for (var i = 0; i < m.Layers.Count; i++) + { + Assert.IsTrue(c.Equals((VectorLayer)m.Layers[i], + (VectorLayer)mD.Layers[i]), + "Layer {0}, '{1}' Differs at {2}", + i, m.Layers[i].LayerName, string.Join(", ", c.DifferAt)); + } + + Assert.AreEqual(m.PixelAspectRatio, mD.PixelAspectRatio); + Assert.AreEqual(m.PixelHeight, mD.PixelHeight); + Assert.AreEqual(m.PixelWidth, mD.PixelWidth); + Assert.AreEqual(m.PixelSize, mD.PixelSize); + + Assert.AreEqual(m.BackColor, mD.BackColor); + Assert.IsTrue(m.Center.Equals(mD.Center)); + Assert.IsTrue(m.GetExtents().Equals(mD.GetExtents())); + Assert.IsTrue(m.Envelope.Equals(mD.Envelope)); + + Assert.AreEqual(m.Decorations.Count, mD.Decorations.Count); + Assert.AreEqual(m.SRID, mD.SRID); + Assert.AreEqual(m.Zoom, mD.Zoom); + + Assert.DoesNotThrow(() => m.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(new MapTest()), name + "-S.bmp"))); + Assert.DoesNotThrow(() => mD.GetMap().Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(new MapTest()), name + "-D.bmp"))); + } + + + + [Test, Description("MapQuest base map, OSM of Aurich, randomly styled")] + public void TestMap2() + { + var m = new Map(_mapSize); + m.BackgroundLayer.Add(new TileLayer(KnownTileSources.Create(KnownTileSource.MapQuest), "MapQuest")); + + string cn = $"Data Source={Path.Combine("TestData", "osm_aurich.sqlite")};"; + + var ct = Wgs84ToWebMercator; + //Env[7,45731445821406 : 7,53454260528903, 53,4342695512313 : 53,478793942147] + var box = new Envelope(7.45731445821406, 7.53454260528903, 53.4342695512313, 53.478793942147); + var box3857 = GeometryTransform.TransformBox(box, ct.MathTransform); + + m.ZoomToBox(box3857); + + foreach (var msp in ManagedSpatiaLite.GetSpatialTables(cn)) + { + var l = new VectorLayer(msp.Table, msp); + switch (msp.Table.Substring(0, 2).ToLower()) + { + case "pt": + l.Style = VectorStyle.CreateRandomPuntalStyle(); + break; + case "ln": + l.Style = VectorStyle.CreateRandomLinealStyle(); + break; + case "pg": + l.Style = VectorStyle.CreateRandomPolygonalStyle(); + break; + default: + l.Style = VectorStyle.CreateRandomStyle(); + break; + } + + l.CoordinateTransformation = ct; + m.Layers.Add(l); + } + + var f = GetFormatter(); + //BruTile.Utility.AddBruTileSurrogates(GetFormatter()); + + Map mD = null; + Assert.DoesNotThrow(() => mD = SandD(m, f)); + + TestMaps("Test2", m, mD); + } + + private static ICoordinateTransformation Wgs84ToWebMercator + { + get + { + return new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory() + .CreateFromCoordinateSystems(ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, + ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator); + } + } + } +} +#endif diff --git a/UnitTests/TestData/CreatingData.cs b/UnitTests/TestData/CreatingData.cs index 9b40c62d..ebe7d883 100644 --- a/UnitTests/TestData/CreatingData.cs +++ b/UnitTests/TestData/CreatingData.cs @@ -1,190 +1,190 @@ -namespace UnitTests.TestData -{ - /// - /// Examples of creating spatial data - /// - public static class CreatingData - { - private static readonly System.Random _rng = new System.Random(); - - public static System.Random RandomNumberGenerator - { - get { return _rng; } - } - - /// - /// Creates an array of random values in the given range [, ]. - /// - /// The length of the array, aka the number of values - /// The lower bound. - /// The upper bound. - /// An array of random values - public static System.Double[] GetRandomOrdinates(System.Int32 size, System.Double min, System.Double max) - { - System.Double[] arr = new System.Double[size]; - System.Double width = max - min; - for (System.Int32 i = 0; i < size; i++) - { - System.Double randomValue = _rng.NextDouble(); - arr[i] = min + randomValue * width; - } - return arr; - } - - - /// - /// Creates a FeatureDataTable from arrays of x, y and z components - /// - /// an array of doubles representing the x ordinate values - /// an array of doubles representing the y ordinate values - /// an array of doubles representing the z ordinate values - /// - public static SharpMap.Data.FeatureDataTable CreatePointFeatureDataTableFromArrays(double[] xcomponents, - double[] ycomponents, - double[] zcomponents) - { - var factory = new NetTopologySuite.Geometries.GeometryFactory(); - var threedee = false; - if (zcomponents != null) - { - if (!(zcomponents.Length == ycomponents.Length && zcomponents.Length == xcomponents.Length)) - throw new System.ApplicationException("Mismatched Array Lengths"); - - threedee = true; - } - else - { - if (ycomponents.Length != xcomponents.Length) - throw new System.ApplicationException("Mismatched Array Lengths"); - } - - var fdt = new SharpMap.Data.FeatureDataTable(); - fdt.Columns.Add("TimeStamp", typeof (System.DateTime)); // add example timestamp attribute - for (var i = 0; i < xcomponents.Length; i++) - { - SharpMap.Data.FeatureDataRow fdr = fdt.NewRow(); - - fdr.Geometry = factory.CreatePoint(threedee - ? new GeoAPI.Geometries.Coordinate(xcomponents[i], ycomponents[i], zcomponents[i]) - : new GeoAPI.Geometries.Coordinate(xcomponents[i], ycomponents[i])); - - fdr["TimeStamp"] = System.DateTime.Now; //set the timestamp property - fdt.AddRow(fdr); - } - - return fdt; - } - } - - public static class ShapeFactory - { - public static GeoAPI.Geometries.ILinearRing CreateRectangle(GeoAPI.Geometries.IGeometryFactory factory, - GeoAPI.Geometries.Coordinate leftTop, GeoAPI.Geometries.Coordinate rightBottom) - { - var pts = new[] - { - leftTop, - new GeoAPI.Geometries.Coordinate(rightBottom.X, leftTop.Y), - rightBottom, - new GeoAPI.Geometries.Coordinate(leftTop.X, rightBottom.Y), - leftTop - }; - return factory.CreateLinearRing(pts); - } - - public static GeoAPI.Geometries.ILinearRing CreateRectangle(GeoAPI.Geometries.IGeometryFactory factory, - GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size) - { - var wh = new System.Drawing.SizeF(size.Width * 0.5f, size.Height * 0.5f); - var lt = new GeoAPI.Geometries.Coordinate(center.X - wh.Width, center.Y + wh.Height); - var rb = new GeoAPI.Geometries.Coordinate(center.X + wh.Width, center.Y - wh.Height); - - return CreateRectangle(factory, lt, rb); - } - - public static GeoAPI.Geometries.ILinearRing CreateEllipse(GeoAPI.Geometries.IGeometryFactory factory, - GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size) - { - return CreateEllipse(factory, center, size, 12); - } - - public static GeoAPI.Geometries.ILinearRing CreateEllipse(GeoAPI.Geometries.IGeometryFactory factory, - GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size, int segmentsPerQuadrant) - { - const double piHalf = System.Math.PI * 0.5d; - - var step = piHalf / segmentsPerQuadrant; - - var pts = new GeoAPI.Geometries.Coordinate[4 * segmentsPerQuadrant + 1]; - var angle = 0d; - for (var i = 0; i < 4 * segmentsPerQuadrant; i++) - { - pts[i] = new GeoAPI.Geometries.Coordinate(center.X + System.Math.Cos(angle) * size.Width, - center.Y + System.Math.Sin(angle) * size.Height); - angle += step; - } - pts[pts.Length - 1] = pts[0]; - return factory.CreateLinearRing(pts); - } - } - - public class TestShapeFactory - { - public static readonly GeoAPI.Geometries.IGeometryFactory Factory = - new NetTopologySuite.Geometries.GeometryFactory(new NetTopologySuite.Geometries.PrecisionModel(0.01)); - - [NUnit.Framework.Test] - public void TestRectangle() - { - var rect = ShapeFactory.CreateRectangle(Factory, new GeoAPI.Geometries.Coordinate(1, 2), new GeoAPI.Geometries.Coordinate(2, 1)); - NUnit.Framework.Assert.AreEqual(rect.StartPoint, rect.EndPoint); - NUnit.Framework.Assert.AreEqual(4, rect.Length); - - var rect2 = ShapeFactory.CreateRectangle(Factory, new GeoAPI.Geometries.Coordinate(1.5, 1.5), new System.Drawing.SizeF(1f, 1f)); - NUnit.Framework.Assert.AreEqual(rect, rect2); - - NUnit.Framework.Assert.AreEqual("LINEARRING (1 2, 2 2, 2 1, 1 1, 1 2)", rect.ToString()); - } - [NUnit.Framework.Test] - public void TestEllipse() - { - var ell = ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(1, 1), new System.Drawing.SizeF(1, 1), 1); - NUnit.Framework.Assert.AreEqual(ell.StartPoint, ell.EndPoint); - NUnit.Framework.Assert.LessOrEqual(System.Math.Abs(4 * System.Math.Sqrt(2) - ell.Length), 0.00001d); - - - NUnit.Framework.Assert.AreEqual("LINEARRING (2 1, 1 2, 0 1, 1 0, 2 1)", ell.ToString()); - var ell2 = ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(1, 1), new System.Drawing.SizeF(1, 1)); - System.Diagnostics.Trace.WriteLine(ell2.ToString()); - } - - [NUnit.Framework.Test] - public void TestLayer() - { - var map = new SharpMap.Map(new System.Drawing.Size(500, 500)); - var gp = new SharpMap.Data.Providers.GeometryProvider( - new[] - { - Factory.CreatePolygon( - ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(0, 0), - new System.Drawing.SizeF(40, 30)), - new[] - { - ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(90, 55), - new System.Drawing.SizeF(40, 30)), - ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(77, 24), - new System.Drawing.SizeF(40, 30)), - ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(-80, 41), - new System.Drawing.SizeF(40, 30)), - ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(-45, -36), - new System.Drawing.SizeF(40, 30)), - }) - }); - var gl = new SharpMap.Layers.VectorLayer("GeometryLayer", gp); - map.Layers.Add(gl); - map.ZoomToExtents(); - var mapimage = map.GetMap(); - mapimage.Save("ellipse.png", System.Drawing.Imaging.ImageFormat.Png); - } - } -} +namespace UnitTests.TestData +{ + /// + /// Examples of creating spatial data + /// + public static class CreatingData + { + private static readonly System.Random _rng = new System.Random(); + + public static System.Random RandomNumberGenerator + { + get { return _rng; } + } + + /// + /// Creates an array of random values in the given range [, ]. + /// + /// The length of the array, aka the number of values + /// The lower bound. + /// The upper bound. + /// An array of random values + public static System.Double[] GetRandomOrdinates(System.Int32 size, System.Double min, System.Double max) + { + System.Double[] arr = new System.Double[size]; + System.Double width = max - min; + for (System.Int32 i = 0; i < size; i++) + { + System.Double randomValue = _rng.NextDouble(); + arr[i] = min + randomValue * width; + } + return arr; + } + + + /// + /// Creates a FeatureDataTable from arrays of x, y and z components + /// + /// an array of doubles representing the x ordinate values + /// an array of doubles representing the y ordinate values + /// an array of doubles representing the z ordinate values + /// + public static SharpMap.Data.FeatureDataTable CreatePointFeatureDataTableFromArrays(double[] xcomponents, + double[] ycomponents, + double[] zcomponents) + { + var factory = new NetTopologySuite.Geometries.GeometryFactory(); + var threedee = false; + if (zcomponents != null) + { + if (!(zcomponents.Length == ycomponents.Length && zcomponents.Length == xcomponents.Length)) + throw new System.ApplicationException("Mismatched Array Lengths"); + + threedee = true; + } + else + { + if (ycomponents.Length != xcomponents.Length) + throw new System.ApplicationException("Mismatched Array Lengths"); + } + + var fdt = new SharpMap.Data.FeatureDataTable(); + fdt.Columns.Add("TimeStamp", typeof (System.DateTime)); // add example timestamp attribute + for (var i = 0; i < xcomponents.Length; i++) + { + SharpMap.Data.FeatureDataRow fdr = fdt.NewRow(); + + fdr.Geometry = factory.CreatePoint(threedee + ? new GeoAPI.Geometries.Coordinate(xcomponents[i], ycomponents[i], zcomponents[i]) + : new GeoAPI.Geometries.Coordinate(xcomponents[i], ycomponents[i])); + + fdr["TimeStamp"] = System.DateTime.Now; //set the timestamp property + fdt.AddRow(fdr); + } + + return fdt; + } + } + + public static class ShapeFactory + { + public static GeoAPI.Geometries.ILinearRing CreateRectangle(GeoAPI.Geometries.IGeometryFactory factory, + GeoAPI.Geometries.Coordinate leftTop, GeoAPI.Geometries.Coordinate rightBottom) + { + var pts = new[] + { + leftTop, + new GeoAPI.Geometries.Coordinate(rightBottom.X, leftTop.Y), + rightBottom, + new GeoAPI.Geometries.Coordinate(leftTop.X, rightBottom.Y), + leftTop + }; + return factory.CreateLinearRing(pts); + } + + public static GeoAPI.Geometries.ILinearRing CreateRectangle(GeoAPI.Geometries.IGeometryFactory factory, + GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size) + { + var wh = new System.Drawing.SizeF(size.Width * 0.5f, size.Height * 0.5f); + var lt = new GeoAPI.Geometries.Coordinate(center.X - wh.Width, center.Y + wh.Height); + var rb = new GeoAPI.Geometries.Coordinate(center.X + wh.Width, center.Y - wh.Height); + + return CreateRectangle(factory, lt, rb); + } + + public static GeoAPI.Geometries.ILinearRing CreateEllipse(GeoAPI.Geometries.IGeometryFactory factory, + GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size) + { + return CreateEllipse(factory, center, size, 12); + } + + public static GeoAPI.Geometries.ILinearRing CreateEllipse(GeoAPI.Geometries.IGeometryFactory factory, + GeoAPI.Geometries.Coordinate center, System.Drawing.SizeF size, int segmentsPerQuadrant) + { + const double piHalf = System.Math.PI * 0.5d; + + var step = piHalf / segmentsPerQuadrant; + + var pts = new GeoAPI.Geometries.Coordinate[4 * segmentsPerQuadrant + 1]; + var angle = 0d; + for (var i = 0; i < 4 * segmentsPerQuadrant; i++) + { + pts[i] = new GeoAPI.Geometries.Coordinate(center.X + System.Math.Cos(angle) * size.Width, + center.Y + System.Math.Sin(angle) * size.Height); + angle += step; + } + pts[pts.Length - 1] = pts[0]; + return factory.CreateLinearRing(pts); + } + } + + public class TestShapeFactory + { + public static readonly GeoAPI.Geometries.IGeometryFactory Factory = + new NetTopologySuite.Geometries.GeometryFactory(new NetTopologySuite.Geometries.PrecisionModel(0.01)); + + [NUnit.Framework.Test] + public void TestRectangle() + { + var rect = ShapeFactory.CreateRectangle(Factory, new GeoAPI.Geometries.Coordinate(1, 2), new GeoAPI.Geometries.Coordinate(2, 1)); + NUnit.Framework.Assert.AreEqual(rect.StartPoint, rect.EndPoint); + NUnit.Framework.Assert.AreEqual(4, rect.Length); + + var rect2 = ShapeFactory.CreateRectangle(Factory, new GeoAPI.Geometries.Coordinate(1.5, 1.5), new System.Drawing.SizeF(1f, 1f)); + NUnit.Framework.Assert.AreEqual(rect, rect2); + + NUnit.Framework.Assert.AreEqual("LINEARRING (1 2, 2 2, 2 1, 1 1, 1 2)", rect.ToString()); + } + [NUnit.Framework.Test] + public void TestEllipse() + { + var ell = ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(1, 1), new System.Drawing.SizeF(1, 1), 1); + NUnit.Framework.Assert.AreEqual(ell.StartPoint, ell.EndPoint); + NUnit.Framework.Assert.LessOrEqual(System.Math.Abs(4 * System.Math.Sqrt(2) - ell.Length), 0.00001d); + + + NUnit.Framework.Assert.AreEqual("LINEARRING (2 1, 1 2, 0 1, 1 0, 2 1)", ell.ToString()); + var ell2 = ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(1, 1), new System.Drawing.SizeF(1, 1)); + System.Diagnostics.Trace.WriteLine(ell2.ToString()); + } + + [NUnit.Framework.Test] + public void TestLayer() + { + var map = new SharpMap.Map(new System.Drawing.Size(500, 500)); + var gp = new SharpMap.Data.Providers.GeometryProvider( + new[] + { + Factory.CreatePolygon( + ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(0, 0), + new System.Drawing.SizeF(40, 30)), + new[] + { + ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(90, 55), + new System.Drawing.SizeF(40, 30)), + ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(77, 24), + new System.Drawing.SizeF(40, 30)), + ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(-80, 41), + new System.Drawing.SizeF(40, 30)), + ShapeFactory.CreateEllipse(Factory, new GeoAPI.Geometries.Coordinate(-45, -36), + new System.Drawing.SizeF(40, 30)), + }) + }); + var gl = new SharpMap.Layers.VectorLayer("GeometryLayer", gp); + map.Layers.Add(gl); + map.ZoomToExtents(); + using (var mapImage = map.GetMap()) + mapImage.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "ellipse.png"), System.Drawing.Imaging.ImageFormat.Png); + } + } +} diff --git a/UnitTests/UnitTestsFixture.cs b/UnitTests/UnitTestsFixture.cs index 38815505..11f20c13 100644 --- a/UnitTests/UnitTestsFixture.cs +++ b/UnitTests/UnitTestsFixture.cs @@ -1,36 +1,45 @@ -namespace UnitTests -{ - [NUnit.Framework.SetUpFixture] - public class UnitTestsFixture - { - private System.Diagnostics.Stopwatch _stopWatch; - - [NUnit.Framework.SetUp] - public void RunBeforeAnyTests() - { - var gss = new NetTopologySuite.NtsGeometryServices(); - var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( - new ProjNet.CoordinateSystems.CoordinateSystemFactory(), - new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(), - SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); - - GeoAPI.GeometryServiceProvider.Instance = gss; - SharpMap.Session.Instance - .SetGeometryServices(gss) - .SetCoordinateSystemServices(css) - .SetCoordinateSystemRepository(css); - - _stopWatch = new System.Diagnostics.Stopwatch(); - System.Diagnostics.Trace.WriteLine("Starting tests"); - _stopWatch.Start(); - } - - [NUnit.Framework.TearDown] - public void RunAfterAllTests() - { - _stopWatch.Stop(); - System.Diagnostics.Trace.WriteLine( - string.Format("All tests accomplished in {0}ms", _stopWatch.ElapsedMilliseconds)); - } - } -} \ No newline at end of file +namespace UnitTests +{ + [NUnit.Framework.SetUpFixture] + public class UnitTestsFixture + { + private System.Diagnostics.Stopwatch _stopWatch; + private const string ImageBase = "Images"; + + [NUnit.Framework.SetUp] + public void RunBeforeAnyTests() + { + var gss = new NetTopologySuite.NtsGeometryServices(); + var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( + new ProjNet.CoordinateSystems.CoordinateSystemFactory(), + new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + + GeoAPI.GeometryServiceProvider.Instance = gss; + SharpMap.Session.Instance + .SetGeometryServices(gss) + .SetCoordinateSystemServices(css) + .SetCoordinateSystemRepository(css); + + _stopWatch = new System.Diagnostics.Stopwatch(); + System.Diagnostics.Trace.WriteLine("Starting tests"); + _stopWatch.Start(); + } + + [NUnit.Framework.TearDown] + public void RunAfterAllTests() + { + _stopWatch.Stop(); + System.Diagnostics.Trace.WriteLine( + string.Format("All tests accomplished in {0}ms", _stopWatch.ElapsedMilliseconds)); + } + + internal static string GetImageDirectory(object T) + { + var imgPath = System.IO.Path.Combine($"{ImageBase}\\{T.GetType().FullName}"); + if (!System.IO.Directory.Exists(imgPath)) + System.IO.Directory.CreateDirectory(imgPath); + return imgPath; + } + } +} From 8a0c5db5d6d4259a8c96e7272dd0034a282cd117 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 13 Jul 2019 15:51:58 +0700 Subject: [PATCH 089/186] Reset MapTransform in MapDecoration base class, and update method summaries accordingly on IMapDecoration and abstract methods --- SharpMap/Rendering/Decoration/Disclaimer.cs | 12 ---------- SharpMap/Rendering/Decoration/EyeOfSight.cs | 9 ++------ .../Rendering/Decoration/IMapDecoration.cs | 11 ++++++--- .../Rendering/Decoration/MapDecoration.cs | 23 +++++++++++-------- SharpMap/Rendering/Decoration/NorthArrow.cs | 16 ++----------- 5 files changed, 25 insertions(+), 46 deletions(-) diff --git a/SharpMap/Rendering/Decoration/Disclaimer.cs b/SharpMap/Rendering/Decoration/Disclaimer.cs index 1ab225a4..ab88f9e4 100644 --- a/SharpMap/Rendering/Decoration/Disclaimer.cs +++ b/SharpMap/Rendering/Decoration/Disclaimer.cs @@ -87,24 +87,12 @@ public Color HaloColor #region MapDecoration overrides - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// - /// - /// The protected override Size InternalSize(Graphics g, MapViewport map) { var s = g.MeasureString(Text, Font); return new Size((int)Math.Ceiling(s.Width), (int)Math.Ceiling(s.Height)); } - /// - /// Function to render the actual map decoration - /// - /// - /// protected override void OnRender(Graphics g, MapViewport map) { var layoutRectangle = g.ClipBounds; diff --git a/SharpMap/Rendering/Decoration/EyeOfSight.cs b/SharpMap/Rendering/Decoration/EyeOfSight.cs index ffd9e9e0..166d624a 100644 --- a/SharpMap/Rendering/Decoration/EyeOfSight.cs +++ b/SharpMap/Rendering/Decoration/EyeOfSight.cs @@ -62,18 +62,13 @@ public EyeOfSight() #region MapDecoration overrides - /// - /// Function to render the actual map decoration - /// - /// - /// protected override void OnRender(Graphics g, MapViewport map) { // Render the rosetta base.OnRender(g, map); var clip = g.ClipBounds; - var oldTransform = g.Transform; + //var oldTransform = g.Transform; var newTransform = new Matrix(1f, 0f, 0f, 1f, clip.Left + Size.Width*0.5f, clip.Top + Size.Height*0.5f); g.Transform = newTransform; @@ -98,7 +93,7 @@ protected override void OnRender(Graphics g, MapViewport map) // need to outline the needle g.FillPolygon(new SolidBrush(OpacityColor(NeedleFillColor)), pts ); - g.Transform = oldTransform; + //g.Transform = oldTransform; } #endregion diff --git a/SharpMap/Rendering/Decoration/IMapDecoration.cs b/SharpMap/Rendering/Decoration/IMapDecoration.cs index 84154eb0..c79c8388 100644 --- a/SharpMap/Rendering/Decoration/IMapDecoration.cs +++ b/SharpMap/Rendering/Decoration/IMapDecoration.cs @@ -9,10 +9,15 @@ namespace SharpMap.Rendering.Decoration public interface IMapDecoration { /// - /// Renders the map decoration to the graphics object + /// Draw the map decoration. + /// Note that base class implementation resets .Transform + /// prior to raising event OnRendering, and restore the .Transform prior to + /// raising event OnRendered. + /// Likewise, .Clip is reset prior to rendering map decoration, and restored + /// immediately after rendering. /// - /// The graphics object - /// The map viewport + /// + /// void Render(Graphics g, MapViewport map); [Obsolete("Use Render (Graphics, MapViewport)")] diff --git a/SharpMap/Rendering/Decoration/MapDecoration.cs b/SharpMap/Rendering/Decoration/MapDecoration.cs index e1b3f86b..d2e0b45b 100644 --- a/SharpMap/Rendering/Decoration/MapDecoration.cs +++ b/SharpMap/Rendering/Decoration/MapDecoration.cs @@ -222,18 +222,16 @@ private static GraphicsPath CreateRoundedRectangle(Rectangle rectangle, Size mar return gp; } - - /// - /// Draw the map decoration - /// - /// - /// public void Render(Graphics g, MapViewport map) { //Is this map decoration enabled? if (!Enabled) return; + // remove any image to world rotation + var oldTransform = g.Transform; + g.ResetTransform(); + //Preparing rendering OnRendering(g, map); @@ -258,7 +256,9 @@ public void Render(Graphics g, MapViewport map) //Restore old clip region g.Clip = oldClip; - + + // restore any image to world rotation + g.Transform = oldTransform; //Finished rendering OnRendered(g, map); @@ -272,7 +272,8 @@ public void Render(Graphics g, Map map) /// - /// Function to render the actual map decoration + /// Render the actual map decoration. + /// Refer to MapDecoration. for underlying management of .Transform /// /// /// @@ -287,7 +288,8 @@ protected virtual void OnRender(Graphics g, Map map) } /// - /// Function to render the actual map decoration + /// Signal commencing rendering + /// Refer to MapDecoration. for underlying management of .Transform /// /// /// @@ -303,7 +305,8 @@ protected virtual void OnRendering(Graphics g, Map map) } /// - /// Function to render the actual map decoration + /// Signal completion of rendering + /// Refer to MapDecoration. for underlying management of .Transform /// /// /// diff --git a/SharpMap/Rendering/Decoration/NorthArrow.cs b/SharpMap/Rendering/Decoration/NorthArrow.cs index 73be4051..164c41e7 100644 --- a/SharpMap/Rendering/Decoration/NorthArrow.cs +++ b/SharpMap/Rendering/Decoration/NorthArrow.cs @@ -69,23 +69,11 @@ public NorthArrow() #region MapDecoration overrides - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// The graphics object - /// The map - /// The size of the map decoration protected override Size InternalSize(Graphics g, MapViewport map) { return Size; } - /// - /// Function to render the actual map decoration - /// - /// - /// protected override void OnRender(Graphics g, MapViewport map) { var image = NorthArrowImage ?? DefaultNorthArrowBitmap; @@ -104,7 +92,7 @@ protected override void OnRender(Graphics g, MapViewport map) var rot = -90 + (dy > 0 ? -1 : 1) * Math.Acos(cos) / GeoSpatialMath.DegToRad; var halfSize = new Size((int)(0.5f*Size.Width), (int)(0.5f*Size.Height)); - var oldTransform = g.Transform; + //var oldTransform = g.Transform; var clip = g.ClipBounds; var newTransform = new Matrix(1f, 0f, 0f, 1f, @@ -125,7 +113,7 @@ protected override void OnRender(Graphics g, MapViewport map) var rect = new Rectangle(-halfSize.Width, -halfSize.Height, Size.Width, Size.Height); g.DrawImage(image, rect, 0, 0, image.Size.Width, image.Size.Height, GraphicsUnit.Pixel, ia); - g.Transform = oldTransform; + //g.Transform = oldTransform; } #endregion From 95f78c8015e55453fca1ecf0906ba061f3f3a442 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 13 Jul 2019 15:57:25 +0700 Subject: [PATCH 090/186] MapTransform enhancements --- SharpMap/Geometries/GeoAPIEx.cs | 802 +++++++++++++-------------- SharpMap/Map/Map.cs | 193 ++++--- SharpMap/Map/MapViewport.cs | 678 ++++++++++++---------- SharpMap/Utilities/GeoSpatialMath.cs | 261 +++++---- SharpMap/Utilities/Transform.cs | 286 +++++++--- 5 files changed, 1215 insertions(+), 1005 deletions(-) diff --git a/SharpMap/Geometries/GeoAPIEx.cs b/SharpMap/Geometries/GeoAPIEx.cs index 77de90f1..c8907c04 100644 --- a/SharpMap/Geometries/GeoAPIEx.cs +++ b/SharpMap/Geometries/GeoAPIEx.cs @@ -1,406 +1,396 @@ -using SharpMap; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Reflection; -using NetTopologySuite.Geometries; -using SharpMap.Rendering; - -namespace GeoAPI.Geometries -{ - /// - /// Set of extension methods for use of GeoAPI within SharpMap - /// - public static class GeoAPIEx - { - - /// - /// Gets the minimum coordinate of the - /// - /// The envelope - /// The minimum coordinate - public static Coordinate Min(this Envelope self) - { - return new Coordinate(self.MinX, self.MinY); - } - - /// - /// Ensures that a CoordinateSequence forms a valid ring, - /// returning a new closed sequence of the correct length if required. - /// If the input sequence is already a valid ring, it is returned - /// without modification. - /// If the input sequence is too short or is not closed, - /// it is extended with one or more copies of the start point. - /// - /// The CoordinateSequenceFactory to use to create the new sequence - /// The sequence to test - /// The original sequence, if it was a valid ring, or a new sequence which is valid. - public static ICoordinateSequence EnsureValidRing(ICoordinateSequenceFactory fact, ICoordinateSequence seq) - { - var n = seq.Count; - // empty sequence is valid - if (n == 0) return seq; - // too short - make a new one - if (n <= 3) - return CreateClosedRing(fact, seq, 4); - - var isClosed = Math.Abs(seq.GetOrdinate(0, Ordinate.X) - seq.GetOrdinate(n - 1, Ordinate.X)) < double.Epsilon && - Math.Abs(seq.GetOrdinate(0, Ordinate.Y) - seq.GetOrdinate(n - 1, Ordinate.Y)) < double.Epsilon; - if (isClosed) return seq; - // make a new closed ring - return CreateClosedRing(fact, seq, n + 1); - } - - private static ICoordinateSequence CreateClosedRing(ICoordinateSequenceFactory fact, ICoordinateSequence seq, int size) - { - var newseq = fact.Create(size, seq.Dimension); - int n = seq.Count; - Copy(seq, 0, newseq, 0, n); - // fill remaining coordinates with start point - for (int i = n; i < size; i++) - Copy(seq, 0, newseq, i, 1); - return newseq; - } - - /// - /// Copies a section of a to another . - /// The sequences may have different dimensions; - /// in this case only the common dimensions are copied. - /// - /// The sequence to copy coordinates from - /// The starting index of the coordinates to copy - /// The sequence to which the coordinates should be copied to - /// The starting index of the coordinates in - /// The number of coordinates to copy - public static void Copy(ICoordinateSequence src, int srcPos, ICoordinateSequence dest, int destPos, int length) - { - for (int i = 0; i < length; i++) - CopyCoord(src, srcPos + i, dest, destPos + i); - } - - /// - /// Copies a coordinate of a to another . - /// The sequences may have different dimensions; - /// in this case only the common dimensions are copied. - /// - /// The sequence to copy coordinate from - /// The index of the coordinate to copy - /// The sequence to which the coordinate should be copied to - /// The index of the coordinate in - public static void CopyCoord(ICoordinateSequence src, int srcPos, ICoordinateSequence dest, int destPos) - { - int minDim = Math.Min(src.Dimension, dest.Dimension); - for (int dim = 0; dim < minDim; dim++) - { - var ordinate = (Ordinate)dim; - double value = src.GetOrdinate(srcPos, ordinate); - dest.SetOrdinate(destPos, ordinate, value); - } - } - - /// - /// Ensures that a CoordinateSequence forms a valid ring, - /// returning a new closed sequence of the correct length if required. - /// If the input sequence is already a valid ring, it is returned - /// without modification. - /// If the input sequence is too short or is not closed, - /// it is extended with one or more copies of the start point. - /// - /// List of coordinates - /// The original sequence, if it was a valid ring, or a new sequence which is valid. - public static void EnsureValidRing(this List coordinates) - { - var seq = GeometryServiceProvider.Instance.DefaultCoordinateSequenceFactory.Create(coordinates.ToArray()); - seq = EnsureValidRing(GeometryServiceProvider.Instance.DefaultCoordinateSequenceFactory, seq); - if (seq.Count != coordinates.Count) - { - for (int i = coordinates.Count; i < seq.Count; i++) - { - coordinates.Add(seq.GetCoordinate(i)); - } - } - } - - /// - /// Gets the maximum coordinate of the - /// - /// The envelope - /// The maximum coordinate - public static Coordinate Max(this Envelope self) - { - return new Coordinate(self.MaxX, self.MaxY); - } - - /// - /// Adds to coordinate's - /// - /// the first coordinate - /// The second coordinate - public static Coordinate Add(this Coordinate self, Coordinate summand) - { - if (self == null && summand == null) - return null; - if (summand == null) - return self; - if (self == null) - return summand; - - // for now we only care for 2D - return new Coordinate(self.X + summand.X, self.Y + summand.Y); - } - - /// - /// Subtracts two coordinates from one another - /// - /// The first coordinate - /// The second coordinate - public static Coordinate Subtract(this Coordinate self, Coordinate summand) - { - if (self == null && summand == null) - return null; - if (summand == null) - return self; - if (self == null) - return new Coordinate(-summand.X, -summand.Y); - - // for now we only care for 2D - return new Coordinate(self.X - summand.X, self.Y - summand.Y); - } - - /// - /// Gets the axis of the longest axis - /// - /// - /// - public static Ordinate LongestAxis(this Envelope self) - { - if (self.MaxExtent == self.Width) - return Ordinate.X; - return Ordinate.Y; - } - - /// - /// Gets the bottom-left coordinate of the - /// - /// The envelope - /// The bottom-left coordinate - public static Coordinate BottomLeft(this Envelope self) - { - return self.Min(); - } - - /// - /// Gets the bottom-right coordinate of the - /// - /// The envelope - /// The bottom-right coordinate - public static Coordinate BottomRight(this Envelope self) - { - return new Coordinate(self.MaxX, self.MinY); - } - - /// - /// Gets the top-left coordinate of the - /// - /// The envelope - /// The top-left coordinate - public static Coordinate TopLeft(this Envelope self) - { - return new Coordinate(self.MinX, self.MaxY); - } - - /// - /// Gets the top-right coordinate of the - /// - /// The envelope - /// The top-right coordinate - public static Coordinate TopRight(this Envelope self) - { - return self.Max(); - } - - /// - /// Gets the minimum y-value of the - /// - /// The envelope - /// The minimum y-value - public static double Bottom(this Envelope self) - { - return self.MinY; - } - - /// - /// Gets the maximum y-value of the - /// - /// The envelope - /// The maximum y-value - public static double Top(this Envelope self) - { - return self.MaxY; - } - - /// - /// Gets the minimum x-value of the - /// - /// The envelope - /// The minimum x-value - public static double Left(this Envelope self) - { - return self.MinX; - } - - /// - /// Gets the maximum x-value of the - /// - /// The envelope - /// The maximum x-value - public static double Right(this Envelope self) - { - return self.MaxX; - } - - /// - /// Transforms a to an array of s. - /// - /// The linestring - /// The map that defines the affine coordinate transformation - /// The array of s - public static PointF[] TransformToImage(this ILineString self, MapViewport map) - { - return TransformToImage(self.Coordinates, map); - } - - /// - /// Transforms an array of s to an array of s. - /// - /// The array of coordinates - /// The map that defines the affine coordinate transformation - /// The array of s - private static PointF[] TransformToImage(Coordinate[] vertices, MapViewport map) - { - var v = new PointF[vertices.Length]; - for (var i = 0; i < vertices.Length; i++) - v[i] = map.WorldToImage(vertices[i]); - return v; - } - - /// - /// Converts a to an array of s. - /// - /// The coordinate - /// An array of doubles - public static double [] ToDoubleArray(this Coordinate self) - { - return new[] { self.X, self.Y /*, self.Z */}; - } - - /// - /// Abbreviation to counter clockwise function - /// - /// The ring - /// true if the ring is oriented counter clockwise - public static bool IsCCW(this ILinearRing self) - { - return NetTopologySuite.Algorithm.Orientation.IsCCW(self.Coordinates); - } - - /// - /// Increases the size of the boundingbox by the given amount in all directions - /// - /// The envelope to grow - /// Amount to grow in all directions - public static Envelope Grow(this Envelope self, double amount) - { - return new Envelope(self.MinX - amount, self.MaxX + amount, - self.MinY - amount, self.MaxY + amount); - } - - /// - /// Increases the size of the boundingbox by the given amount in horizontal and vertical directions - /// - /// The envelope - /// Amount to grow in horizontal direction - /// Amount to grow in vertical direction - public static Envelope Grow(this Envelope self, double amountInX, double amountInY) - { - return new Envelope(self.MinX - amountInX, self.MaxX + amountInX, - self.MinY - amountInY, self.MaxY + amountInY); - } - - /// - /// Transforms a to an array of s - /// - /// The polygon - /// The map that defines the affine coordinate transformation. - /// Use clipping for the polygon - /// An array of PointFs - public static GraphicsPath TransformToImage(this IPolygon self, MapViewport map, bool useClipping = false) - { - var res = new GraphicsPath(FillMode.Alternate); - if (useClipping) - { - res.AddPolygon(VectorRenderer.ClipPolygon( - VectorRenderer.LimitValues(self.ExteriorRing.TransformToImage(map), VectorRenderer.ExtremeValueLimit), - map.Size.Width, map.Size.Height)); - for (var i = 0; i < self.NumInteriorRings; i++) - res.AddPolygon(VectorRenderer.ClipPolygon( - VectorRenderer.LimitValues(self.GetInteriorRingN(i).TransformToImage(map),VectorRenderer.ExtremeValueLimit), - map.Size.Width, map.Size.Height)); - } - else - { - res.AddPolygon(self.ExteriorRing.TransformToImage(map)); - for (var i = 0; i < self.NumInteriorRings; i++) - res.AddPolygon(self.GetInteriorRingN(i).TransformToImage(map)); - } - return res; - } - - /// - /// Tests if a coordinate is empty - /// - /// The coordinate - public static bool IsEmpty(this Coordinate c) - { - if (c == null) return true; - if (!double.IsNaN(c.X)) return false; - if (!double.IsNaN(c.Y)) return false; - return true; - } - - /// - /// - /// - /// - /// - /// - public static IGeometry GeomFromText(this IGeometry self, string wkt) - { - var factory = self == null ? new NetTopologySuite.Geometries.GeometryFactory() : self.Factory; - var reader = new NetTopologySuite.IO.WKTReader(factory); - return reader.Read(wkt); - } - - - private static readonly FieldInfo _envFi; - static GeoAPIEx() - { - try - { - _envFi = typeof(Geometry).GetField("_envelope", BindingFlags.Instance | BindingFlags.NonPublic); - } - catch{} - } - - public static void SetExtent(Geometry geom, Envelope envelope) - { - if (geom == null) - return; - - if (_envFi != null) - _envFi.SetValue(geom, envelope); - } - - } -} +using SharpMap; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Reflection; +using NetTopologySuite.Geometries; +using SharpMap.Rendering; +using SharpMap.Utilities; + +namespace GeoAPI.Geometries +{ + /// + /// Set of extension methods for use of GeoAPI within SharpMap + /// + public static class GeoAPIEx + { + + /// + /// Gets the minimum coordinate of the + /// + /// The envelope + /// The minimum coordinate + public static Coordinate Min(this Envelope self) + { + return new Coordinate(self.MinX, self.MinY); + } + + /// + /// Ensures that a CoordinateSequence forms a valid ring, + /// returning a new closed sequence of the correct length if required. + /// If the input sequence is already a valid ring, it is returned + /// without modification. + /// If the input sequence is too short or is not closed, + /// it is extended with one or more copies of the start point. + /// + /// The CoordinateSequenceFactory to use to create the new sequence + /// The sequence to test + /// The original sequence, if it was a valid ring, or a new sequence which is valid. + public static ICoordinateSequence EnsureValidRing(ICoordinateSequenceFactory fact, ICoordinateSequence seq) + { + var n = seq.Count; + // empty sequence is valid + if (n == 0) return seq; + // too short - make a new one + if (n <= 3) + return CreateClosedRing(fact, seq, 4); + + var isClosed = Math.Abs(seq.GetOrdinate(0, Ordinate.X) - seq.GetOrdinate(n - 1, Ordinate.X)) < double.Epsilon && + Math.Abs(seq.GetOrdinate(0, Ordinate.Y) - seq.GetOrdinate(n - 1, Ordinate.Y)) < double.Epsilon; + if (isClosed) return seq; + // make a new closed ring + return CreateClosedRing(fact, seq, n + 1); + } + + private static ICoordinateSequence CreateClosedRing(ICoordinateSequenceFactory fact, ICoordinateSequence seq, int size) + { + var newseq = fact.Create(size, seq.Dimension); + int n = seq.Count; + Copy(seq, 0, newseq, 0, n); + // fill remaining coordinates with start point + for (int i = n; i < size; i++) + Copy(seq, 0, newseq, i, 1); + return newseq; + } + + /// + /// Copies a section of a to another . + /// The sequences may have different dimensions; + /// in this case only the common dimensions are copied. + /// + /// The sequence to copy coordinates from + /// The starting index of the coordinates to copy + /// The sequence to which the coordinates should be copied to + /// The starting index of the coordinates in + /// The number of coordinates to copy + public static void Copy(ICoordinateSequence src, int srcPos, ICoordinateSequence dest, int destPos, int length) + { + for (int i = 0; i < length; i++) + CopyCoord(src, srcPos + i, dest, destPos + i); + } + + /// + /// Copies a coordinate of a to another . + /// The sequences may have different dimensions; + /// in this case only the common dimensions are copied. + /// + /// The sequence to copy coordinate from + /// The index of the coordinate to copy + /// The sequence to which the coordinate should be copied to + /// The index of the coordinate in + public static void CopyCoord(ICoordinateSequence src, int srcPos, ICoordinateSequence dest, int destPos) + { + int minDim = Math.Min(src.Dimension, dest.Dimension); + for (int dim = 0; dim < minDim; dim++) + { + var ordinate = (Ordinate)dim; + double value = src.GetOrdinate(srcPos, ordinate); + dest.SetOrdinate(destPos, ordinate, value); + } + } + + /// + /// Ensures that a CoordinateSequence forms a valid ring, + /// returning a new closed sequence of the correct length if required. + /// If the input sequence is already a valid ring, it is returned + /// without modification. + /// If the input sequence is too short or is not closed, + /// it is extended with one or more copies of the start point. + /// + /// List of coordinates + /// The original sequence, if it was a valid ring, or a new sequence which is valid. + public static void EnsureValidRing(this List coordinates) + { + var seq = GeometryServiceProvider.Instance.DefaultCoordinateSequenceFactory.Create(coordinates.ToArray()); + seq = EnsureValidRing(GeometryServiceProvider.Instance.DefaultCoordinateSequenceFactory, seq); + if (seq.Count != coordinates.Count) + { + for (int i = coordinates.Count; i < seq.Count; i++) + { + coordinates.Add(seq.GetCoordinate(i)); + } + } + } + + /// + /// Gets the maximum coordinate of the + /// + /// The envelope + /// The maximum coordinate + public static Coordinate Max(this Envelope self) + { + return new Coordinate(self.MaxX, self.MaxY); + } + + /// + /// Adds to coordinate's + /// + /// the first coordinate + /// The second coordinate + public static Coordinate Add(this Coordinate self, Coordinate summand) + { + if (self == null && summand == null) + return null; + if (summand == null) + return self; + if (self == null) + return summand; + + // for now we only care for 2D + return new Coordinate(self.X + summand.X, self.Y + summand.Y); + } + + /// + /// Subtracts two coordinates from one another + /// + /// The first coordinate + /// The second coordinate + public static Coordinate Subtract(this Coordinate self, Coordinate summand) + { + if (self == null && summand == null) + return null; + if (summand == null) + return self; + if (self == null) + return new Coordinate(-summand.X, -summand.Y); + + // for now we only care for 2D + return new Coordinate(self.X - summand.X, self.Y - summand.Y); + } + + /// + /// Gets the axis of the longest axis + /// + /// + /// + public static Ordinate LongestAxis(this Envelope self) + { + if (self.MaxExtent == self.Width) + return Ordinate.X; + return Ordinate.Y; + } + + /// + /// Gets the bottom-left coordinate of the + /// + /// The envelope + /// The bottom-left coordinate + public static Coordinate BottomLeft(this Envelope self) + { + return self.Min(); + } + + /// + /// Gets the bottom-right coordinate of the + /// + /// The envelope + /// The bottom-right coordinate + public static Coordinate BottomRight(this Envelope self) + { + return new Coordinate(self.MaxX, self.MinY); + } + + /// + /// Gets the top-left coordinate of the + /// + /// The envelope + /// The top-left coordinate + public static Coordinate TopLeft(this Envelope self) + { + return new Coordinate(self.MinX, self.MaxY); + } + + /// + /// Gets the top-right coordinate of the + /// + /// The envelope + /// The top-right coordinate + public static Coordinate TopRight(this Envelope self) + { + return self.Max(); + } + + /// + /// Gets the minimum y-value of the + /// + /// The envelope + /// The minimum y-value + public static double Bottom(this Envelope self) + { + return self.MinY; + } + + /// + /// Gets the maximum y-value of the + /// + /// The envelope + /// The maximum y-value + public static double Top(this Envelope self) + { + return self.MaxY; + } + + /// + /// Gets the minimum x-value of the + /// + /// The envelope + /// The minimum x-value + public static double Left(this Envelope self) + { + return self.MinX; + } + + /// + /// Gets the maximum x-value of the + /// + /// The envelope + /// The maximum x-value + public static double Right(this Envelope self) + { + return self.MaxX; + } + + /// + /// Transforms a to an array of s. + /// + /// The linestring + /// The mapviewport defining transformation parameters + /// The array of s + public static PointF[] TransformToImage(this ILineString self, MapViewport map) + { + if (map.MapTransformRotation.Equals(0f)) + return Transform.WorldToMap(self.Coordinates, map.Left, map.Top, map.PixelWidth, map.PixelHeight); + + return Transform.WorldToMap(self.Coordinates,map.WorldToMapTransform(false)); + } + + /// + /// Converts a to an array of s. + /// + /// The coordinate + /// An array of doubles + public static double [] ToDoubleArray(this Coordinate self) + { + return new[] { self.X, self.Y /*, self.Z */}; + } + + /// + /// Abbreviation to counter clockwise function + /// + /// The ring + /// true if the ring is oriented counter clockwise + public static bool IsCCW(this ILinearRing self) + { + return NetTopologySuite.Algorithm.Orientation.IsCCW(self.Coordinates); + } + + /// + /// Increases the size of the boundingbox by the given amount in all directions + /// + /// The envelope to grow + /// Amount to grow in all directions + public static Envelope Grow(this Envelope self, double amount) + { + return new Envelope(self.MinX - amount, self.MaxX + amount, + self.MinY - amount, self.MaxY + amount); + } + + /// + /// Increases the size of the boundingbox by the given amount in horizontal and vertical directions + /// + /// The envelope + /// Amount to grow in horizontal direction + /// Amount to grow in vertical direction + public static Envelope Grow(this Envelope self, double amountInX, double amountInY) + { + return new Envelope(self.MinX - amountInX, self.MaxX + amountInX, + self.MinY - amountInY, self.MaxY + amountInY); + } + + /// + /// Transforms a to an array of s + /// + /// The polygon + /// The map that defines the affine coordinate transformation. + /// Use clipping for the polygon + /// An array of PointFs + public static GraphicsPath TransformToImage(this IPolygon self, MapViewport map, bool useClipping = false) + { + var res = new GraphicsPath(FillMode.Alternate); + if (useClipping) + { + res.AddPolygon(VectorRenderer.ClipPolygon( + VectorRenderer.LimitValues(self.ExteriorRing.TransformToImage(map), VectorRenderer.ExtremeValueLimit), + map.Size.Width, map.Size.Height)); + for (var i = 0; i < self.NumInteriorRings; i++) + res.AddPolygon(VectorRenderer.ClipPolygon( + VectorRenderer.LimitValues(self.GetInteriorRingN(i).TransformToImage(map),VectorRenderer.ExtremeValueLimit), + map.Size.Width, map.Size.Height)); + } + else + { + res.AddPolygon(self.ExteriorRing.TransformToImage(map)); + for (var i = 0; i < self.NumInteriorRings; i++) + res.AddPolygon(self.GetInteriorRingN(i).TransformToImage(map)); + } + return res; + } + + /// + /// Tests if a coordinate is empty + /// + /// The coordinate + public static bool IsEmpty(this Coordinate c) + { + if (c == null) return true; + if (!double.IsNaN(c.X)) return false; + if (!double.IsNaN(c.Y)) return false; + return true; + } + + /// + /// + /// + /// + /// + /// + public static IGeometry GeomFromText(this IGeometry self, string wkt) + { + var factory = self == null ? new NetTopologySuite.Geometries.GeometryFactory() : self.Factory; + var reader = new NetTopologySuite.IO.WKTReader(factory); + return reader.Read(wkt); + } + + + private static readonly FieldInfo _envFi; + static GeoAPIEx() + { + try + { + _envFi = typeof(Geometry).GetField("_envelope", BindingFlags.Instance | BindingFlags.NonPublic); + } + catch{} + } + + public static void SetExtent(Geometry geom, Envelope envelope) + { + if (geom == null) + return; + + if (_envFi != null) + _envFi.SetValue(geom, envelope); + } + + } +} diff --git a/SharpMap/Map/Map.cs b/SharpMap/Map/Map.cs index 02ee4a69..92cdccb0 100644 --- a/SharpMap/Map/Map.cs +++ b/SharpMap/Map/Map.cs @@ -679,7 +679,8 @@ public void RenderMap(Graphics g) double visibleLevel = layer.VisibilityUnits == VisibilityUnits.ZoomLevel ? zoom : scale; if (layer.Enabled && layer.MaxVisible >= visibleLevel && layer.MinVisible < visibleLevel) LayerCollectionRenderer.RenderLayer(layer, g, mvp); - + + OnLayerRendered(layer, LayerCollectionType.Variable); } } @@ -994,7 +995,7 @@ public ILayer GetLayerByName(string name) /// public void ZoomToExtents() { - ZoomToBox(GetExtents()); + ZoomToBox(GetExtents(), true); } /// @@ -1006,18 +1007,33 @@ public void ZoomToExtents() /// the bounding box, thus making the resulting envelope larger! /// /// - public void ZoomToBox(Envelope bbox) + /// True if any map rotation should be taken into account (eg ZoomToExtents). + /// False if rotation has already been accounted for (eg Zoom prev / next stack, or non-rotated views) + public void ZoomToBox(Envelope bbox, bool careAboutTransform = false) { - if (bbox != null && !bbox.IsNull) + if (bbox == null || bbox.IsNull) return; + + if (careAboutTransform && !MapTransformRotation.Equals(0f)) { + // adjust box for rotated views to ensure it is fully visible at maximum possible zoom + var rad = NetTopologySuite.Utilities.Degrees.ToRadians(MapTransformRotation); + var newWidth = bbox.Width * Math.Abs(Math.Cos(rad)) + + bbox.Height * Math.Abs(Math.Sin(rad)); + var newHeight = bbox.Width * Math.Abs(Math.Sin(rad)) + + bbox.Height * Math.Abs(Math.Cos(rad)); + bbox = new Envelope( + bbox.Centre.X - newWidth * 0.5, + bbox.Centre.X + newWidth * 0.5, + bbox.Centre.Y - newHeight * 0.5, + bbox.Centre.Y + newHeight * 0.5); + } + //Ensure aspect ratio var resX = Size.Width == 0 ? double.MaxValue : bbox.Width / Size.Width; var resY = Size.Height == 0 ? double.MaxValue : bbox.Height / Size.Height; var zoom = bbox.Width; if (resY > resX && resX > 0) - { zoom *= resY / resX; - } var center = new Coordinate(bbox.Centre); @@ -1037,69 +1053,79 @@ public void ZoomToBox(Envelope bbox) if (changed && MapViewOnChange != null) MapViewOnChange(); - } } /// - /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. + /// Converts an array of world coordinates to image coordinates based on the current , , + /// map , and (optionally) the . /// - /// Point in world coordinates - /// Indicates whether MapTransform should be taken into account - /// Point in image coordinates - public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) + /// Coordinate array in world coordinates + /// Indicates whether should be applied. True for typical coordinate calcs, + /// False when rendering to image as the Graphics object has already applied the MapTransform + /// PointF array in image coordinates + public PointF[] WorldToImage(Coordinate[] coordinates, bool careAboutMapTransform = false) { - var pTmp = Transform.WorldtoMap(p, this); - if (!careAboutMapTransform || MapTransformRotation.Equals(0f)) - return pTmp; - - using (var transform = MapTransform) + if (MapTransformRotation.Equals(0f)) { - var pts = new[] {pTmp}; - transform.TransformPoints(pts); - return pts[0]; + // simple case is non-rotated views (ie MapTransform does NOT need to be applied) + var left = Center.X - Zoom * 0.5; + var top = Center.Y + MapHeight * 0.5; + return Transform.WorldToMap(coordinates, left, top, PixelWidth, PixelHeight); } - } + // for rotated views, measurements must be performed in the rotated world coordinate space regardless + // of careAboutTransform. The most efficient way is using affine transformation (matrix) to translate, + // ROTATE, scale and flip coordinates, and finally translate to Image centre. + // If careAboutMapTransform == false then the matrix must also apply a reverse rotation as the MapTransform + // will be applied by the graphics object at completion of all drawing + var matrix = Transform.WorldToMapMatrix( + Center, PixelWidth, PixelHeight, MapTransformRotation, Size, careAboutMapTransform); + return Transform.WorldToMap(coordinates, matrix); + } + /// - /// Converts a point from world coordinates to image coordinates based on the current - /// zoom, center and mapsize. + /// Converts a point in world coordinates to image coordinates based on the current , , + /// map , and (optionally) the . /// /// Point in world coordinates - /// Point in image coordinates - public PointF WorldToImage(Point p) + /// Indicates whether should be applied. When rendering to image, + /// the Graphics object has usually applied MapTransform + /// PointF in image coordinates + public PointF WorldToImage(Coordinate p, bool careAboutMapTransform = false) { - return WorldToImage(p, false); + var points = WorldToImage(new Coordinate[] {p}, careAboutMapTransform); + return points[0]; } /// - /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. + /// Converts a point array from image coordinates to world coordinates based on the current , , + /// map , and (optionally) the . /// - /// Point in image coordinates - /// Point in world coordinates - public Point ImageToWorld(PointF p) + /// Point array in image coordinates. Note: if you wish to preserve the input values then + /// you must clone the point array as it will be modified if a MapTransform is applied + /// Indicates whether should be applied. + /// Point array in world coordinates + public Point[] ImageToWorld(PointF[] points, bool careAboutMapTransform = false) { - return ImageToWorld(p, false); + if (careAboutMapTransform && !MapTransformRotation.Equals(0f)) + using (var transformInv = MapTransformInverted) + transformInv.TransformPoints(points); + + return Transform.MapToWorld(points, this); } + /// - /// Converts a point from image coordinates to world coordinates based on the current - /// zoom, center and mapsize. + /// Converts a point from image coordinates to world coordinates based on the current , , + /// map , and (optionally) the . /// - /// Point in image coordinates - /// Indicates whether MapTransform should be taken into account + /// Point in image coordinates. Note: if you wish to preserve the input value then + /// you must clone the point as it will be modified if a MapTransform is applied + /// Indicates whether should be applied. /// Point in world coordinates - public Point ImageToWorld(PointF p, bool careAboutMapTransform) + public Point ImageToWorld(PointF p, bool careAboutMapTransform = false) { - if (careAboutMapTransform && !MapTransformRotation.Equals(0f)) - using (var transformInv = MapTransformInverted) - { - var pts = new[] { p }; - transformInv.TransformPoints(pts); - p = pts[0]; - } - - return Transform.MapToWorld(p, this); + var pts = ImageToWorld(new PointF[] { p }, careAboutMapTransform); + return pts[0]; } #endregion @@ -1144,49 +1170,53 @@ public IList Decorations } /// - /// Gets the extents of the current map based on the current zoom, center and size. - /// If a is applied, the envelope containing the rotated view - /// will be returned, which is used by layers to spatially select data. However, - /// the aspect ratio will probably not be the same as Map. + /// Gets the rectilinear extents of the current map based on the current , + /// , map , and (optionally) the + /// If a is applied, the envelope CONTAINING the rotated view + /// will be returned (used by layers to spatially select data) and the aspect ratio will NOT be the + /// same as map . If aspect ratio is important then refer to + /// and /// public Envelope Envelope { get { - if (double.IsNaN(MapHeight) || double.IsInfinity(MapHeight)) + // height has been adjusted for pixelRatio + var height = MapHeight; + if (double.IsNaN(height) || double.IsInfinity(height)) return new Envelope(0, 0, 0, 0); - var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - MapHeight * .5); - var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + MapHeight * .5); + var ll = new Coordinate(Center.X - Zoom * .5, Center.Y - height * .5); + var ur = new Coordinate(Center.X + Zoom * .5, Center.Y + height * .5); + // simple, non-rotated view if (MapTransformRotation.Equals(0f)) return new Envelope(ll, ur); - else - { - var pts = new[] { new PointF((float)ll.X, (float)ll.Y), - new PointF((float)ll.X, (float)ur.Y), - new PointF((float)ur.X, (float)ur.Y), - new PointF((float)ur.X, (float)ll.Y)}; - - Matrix matrix = new Matrix(); - matrix.RotateAt(-MapTransformRotation, new PointF((float)Center.X, (float)Center.Y)); - matrix.TransformPoints(pts); - - return new Envelope(Math.Min(Math.Min(Math.Min(pts[0].X, pts[1].X), pts[2].X), pts[3].X), - Math.Max(Math.Max(Math.Max(pts[0].X, pts[1].X), pts[2].X), pts[3].X), - Math.Min(Math.Min(Math.Min(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y), - Math.Max(Math.Max(Math.Max(pts[0].Y, pts[1].Y), pts[2].Y), pts[3].Y)); - } - } - } + // otherwise derive envelope containing rotated view (required for layers to select data) + if (Size.Width == 0 || Size.Height == 0) + return new Envelope(0, 0, 0, 0); + + var rad = (double) -MapTransformRotation * Math.PI / 180.0; + var newWidth = (ur.X - ll.X) * Math.Abs(Math.Cos(rad)) + + (ur.Y - ll.Y) * Math.Abs(Math.Sin(rad)); + var newHeight = (ur.X - ll.X) * Math.Abs(Math.Sin(rad)) + + (ur.Y - ll.Y) * Math.Abs(Math.Cos(rad)); + + ll = new Coordinate(Center.X - newWidth * .5, Center.Y - newHeight * .5); + ur = new Coordinate(Center.X + newWidth * .5, Center.Y + newHeight * .5); + return new Envelope(ll, ur); + } + } + /// - /// Getter returns a CLONE. Using the you can alter the coordinate system of the map rendering. - /// This makes it possible to rotate or rescale the image, for instance to have another direction than north upwards. + /// Using the you can alter the coordinate system of the map rendering. + /// This makes it possible to rotate the image, for instance to have another direction than north upwards. + /// The matrix elements are stored, and a new matrix is instantiated for every request /// /// - /// Rotate the map output 45 degrees around its center: + /// Rotate the map output +45 degrees around its center (ie north arrow will point to the top-right corner): /// /// System.Drawing.Drawing2D.Matrix maptransform = new System.Drawing.Drawing2D.Matrix(); //Create transformation matrix /// maptransform.RotateAt(45,new PointF(myMap.Size.Width/2,myMap.Size.Height/2)); //Apply 45 degrees rotation around the center of the map @@ -1239,6 +1269,10 @@ public Matrix MapTransform } } + /// + /// The inverse of used for calculations from Image to World. + /// The matrix elements are stored, and a new matrix is instantiated for every request + /// internal Matrix MapTransformInverted { get @@ -1366,7 +1400,7 @@ public double MapScale } /// - /// Calculated the Zoom value for a given Scale-value + /// Calculate the Zoom value for a given Scale value /// /// /// @@ -1377,20 +1411,21 @@ public double GetMapZoomFromScale(double scale, int dpi) } /// - /// Returns the mapscale if the map was to be rendered with the specified DPI-settings + /// Returns the mapscale if the map was to be rendered at the current with the specified DPI-settings /// /// /// public double GetMapScale(int dpi) { - return ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); + return ScaleCalculations.CalculateScaleNonLatLong(Zoom, Size.Width, 1, dpi); } /// /// Gets or sets the zoom level of map. /// /// - /// The zoom level corresponds to the width of the map in WCS units. + /// The zoom level corresponds to the apparent width of the map in WCS units, regardless of any . + /// Zoom will only equal .Width when is 0 or 180 degrees /// A zoomlevel of 0 will result in an empty map being rendered, but will not throw an exception /// public double Zoom diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index 41ef8c7b..880a8fb4 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -1,308 +1,370 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Runtime.CompilerServices; -using System.Threading; -using GeoAPI.Geometries; -using SharpMap.Utilities; - -namespace SharpMap -{ - /// - /// A utility class, that encapsulates all data required for rendering. - /// - /// This is a value class - public class MapViewport - { - private readonly Envelope _envelope; - private readonly Coordinate _center; - - //private readonly Matrix _mapTransform; - //private readonly Matrix _mapTransformInverted; - - private readonly float[] _mapTransformElements; - private readonly float[] _mapTransformInvertedElements; - - private readonly double _left; - private readonly double _top; - private double _mapScale; - private int _lastDpi; - - // TODO: Reconsider computing map scale - private readonly object _lockMapScale = new object(); - - /// - /// Creates an instance of this class - /// - /// The id of the map - /// The spatial reference - /// The envelope of the viewport - /// The size of the viewport - /// A ratio between width and height - /// An affine map transform matrix - /// The affine map transformation that inverts - public MapViewport(Guid mapId, int srid, Envelope env, Size size, double pixelAspectRatio, Matrix mapTransform, Matrix mapTransformInverted) - { - ID = mapId; - SRID = srid; - - _envelope = env.Copy(); - Size = size; - _center = env.Centre; - - PixelAspectRatio = pixelAspectRatio; - PixelWidth = /*PixelSize = */env.Width/size.Width; - PixelHeight = PixelWidth*pixelAspectRatio; - - Zoom = env.Width; - MapHeight = Zoom * pixelAspectRatio; - - // already cloned - //_mapTransform = mapTransform; - //_mapTransformInverted = mapTransformInverted; - - _mapTransformElements = mapTransform.Elements; - _mapTransformInvertedElements = mapTransformInverted.Elements; - - double height = (Zoom * Size.Height) / Size.Width; - _left = Center.X - Zoom * 0.5; - _top = Center.Y + height * 0.5 * PixelAspectRatio; - } - - /// - /// Creates an instance of this class based on the provided map - /// - /// The Map - public MapViewport(Map map) - :this(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, map.MapTransform, map.MapTransformInverted) - { - } - - /// - /// Gets a value indicating the which this viewport belongs to. - /// - public Guid ID { get; } - - /// - /// Gets a value indicating the spatial reference id of the map - /// - public int SRID { get; /*set;*/ } - - /// - /// Gets a value indicating the size of the map - /// - public Size Size { get; } - - /// - /// Gets a value indicating the area covered by the map (in world units) - /// - public Envelope Envelope - { - get { return _envelope.Copy(); } - } - - /// - /// Gets a value indicating the transformation that has to be applied when - /// rendering the map - /// - public Matrix MapTransform - { - get - { - //lock (_mapTransform) - //{ - // return _mapTransform.Clone(); - //} - return new Matrix( - _mapTransformElements[0], - _mapTransformElements[1], - _mapTransformElements[2], - _mapTransformElements[3], - _mapTransformElements[4], - _mapTransformElements[5] - ); - } - } - - /// - /// Gets a value indicating the inverse transformation that is applied when - /// rendering the map - /// - public Matrix MapTransformInverted - { - get - { - return new Matrix( - _mapTransformInvertedElements[0], - _mapTransformInvertedElements[1], - _mapTransformInvertedElements[2], - _mapTransformInvertedElements[3], - _mapTransformInvertedElements[4], - _mapTransformInvertedElements[5] - ); - } - } - - /// - /// Gets a value indicating the center of the map viewport - /// - public Coordinate Center - { - get { return _center.Copy(); } - } - - /// - /// Gets a value indicating the zoom of the map viewport - /// - /// This value is identical to - public double Zoom { get; /*set;*/ } - - /// - /// Gets a value indicating the height of the map viewport in world units - /// - public double MapHeight { get; } - - /// - /// Gets a value indicating the width of the map viewport in world units - /// - /// This value is equal to - public double MapWidth { get { return Zoom; } } - - /// - /// Gets or sets the aspect-ratio of the pixel scales. A value less than - /// 1 will make the map stretch upwards, and larger than 1 will make it smaller. - /// - /// Throws an argument exception when value is 0 or less. - public double PixelAspectRatio { get; } - - ///// - ///// Get Returns the size of a pixel in world coordinate units - ///// - //[Obsolete("Use PixelWidth or PixelHeight")] - //public double PixelSize { get; private set; } - - /// - /// Returns the width of a pixel in world coordinate units. - /// - public double PixelWidth { get; } - - /// - /// Returns the height of a pixel in world coordinate units. - /// - public double PixelHeight { get; } - - /// - /// Function to compute the denominator of the viewport's scale when using a given resolution. - /// - /// The resolution - /// The scale's denominator - public double GetMapScale(int dpi) - { - // Why lock? - lock (_lockMapScale) - { - if (_lastDpi != dpi) - { - _mapScale = ScaleCalculations.CalculateScaleNonLatLong(Envelope.Width, Size.Width, 1, dpi); - _lastDpi = dpi; - } - return _mapScale; - } - } - - /// - /// Converts a point from world coordinates to image coordinates based on the current - /// , and . - /// - /// Point in world coordinates - /// Indicates whether MapTransform should be taken into account - /// Point in image coordinates - public PointF WorldToImage(Coordinate p, bool careAboutMapTransform) - { - var pTmp = WorldToImage(p); - if (!careAboutMapTransform) - return pTmp; - - var pts = new[] { pTmp }; - //Monitor.Enter(_mapTransform); - using (var mapTransform = MapTransform) - { - if (mapTransform.IsIdentity == false) - { - mapTransform.TransformPoints(pts); - } - } - //Monitor.Exit(_mapTransform); - - return pts[0]; - } - - /// - /// Converts a point from world coordinates to image coordinates based on the current - /// , and . - /// - /// Point in world coordinates - /// Point in image coordinates - public PointF WorldToImage(Coordinate p) - { - if (p.IsEmpty()) - return PointF.Empty; - - double x = (p.X - _left) / PixelWidth; - if (double.IsNaN(x)) - return PointF.Empty; - - double y = (_top - p.Y) / PixelHeight; - if (double.IsNaN(y)) - return PointF.Empty; - - return new PointF((float)x, (float)y); - } - - /// - /// Converts a point from image coordinates to world coordinates based on the current - /// , and . - /// - /// Point in image coordinates - /// Point in world coordinates - public Coordinate ImageToWorld(PointF p) - { - return ImageToWorld(p, false); - } - /// - /// Converts a point from image coordinates to world coordinates based on the current - /// , and . - /// - /// Point in image coordinates - /// Indicates whether MapTransform should be taken into account - /// Point in world coordinates - public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform) - { - var pts = new[] { p }; - //Monitor.Enter(_mapTransformInverted); - using (var mapTransformInverted = MapTransformInverted) - { - if (mapTransformInverted.IsIdentity == false) - { - mapTransformInverted.TransformPoints(pts); - } - } - //Monitor.Exit(_mapTransformInverted); - - return Transform.MapToWorld(pts[0], this); - } - - /// - /// Creates a map viewport from a given map - /// - /// The map - /// - public static implicit operator MapViewport(Map map) - { - return new MapViewport(map); - //return new MapViewport(map.ID, map.SRID, map.Envelope, map.Size, map.PixelAspectRatio, - // map.MapTransform, map.MapTransformInverted); - } - - } -} +using System; +using System.Drawing; +using GeoAPI.Geometries; +using NetTopologySuite.Geometries.Utilities; +using SharpMap.Utilities; + +namespace SharpMap +{ + /// + /// A utility class, that encapsulates all data required for rendering. + /// + /// This is a value class + public class MapViewport + { + private readonly Envelope _envelope; + private readonly Coordinate _center; + + private readonly float[] _mapTransformElements; + private readonly float[] _mapTransformInvertedElements; + + private readonly double[] _worldToMapElements; + private readonly double[] _worldToMapElementsCareAboutTransform; + + private double _mapScale; + private int _lastDpi; + + private readonly object _lockMapScale = new object(); + + /// + /// Creates an instance of this class + /// + /// The id of the map + /// The spatial reference + /// current map zoom + /// map height + /// The envelope containing the viewport + /// The size of the viewport + /// A ratio between width and height + /// An affine map transform matrix + /// The affine map transformation that inverts + /// The rotation in degrees applied by + public MapViewport(Guid mapId, int srid, double zoom, double mapHeight, Envelope env, Size size, double pixelAspectRatio, + System.Drawing.Drawing2D.Matrix mapTransform, System.Drawing.Drawing2D.Matrix mapTransformInverted, + float mapTransformRotation) + { + ID = mapId; + SRID = srid; + + Zoom = zoom; + MapHeight = mapHeight; + + _envelope = env.Copy(); + Size = size; + _center = env.Centre; + + PixelAspectRatio = pixelAspectRatio; + PixelWidth = Zoom / size.Width; + PixelHeight = PixelWidth * pixelAspectRatio; + + _mapTransformElements = mapTransform.Elements; + _mapTransformInvertedElements = mapTransformInverted.Elements; + MapTransformRotation = mapTransformRotation; + + // pre-calculated for use when MapTransformRotation == 0 + Left = Center.X - Zoom * 0.5; + Top = Center.Y + mapHeight * 0.5; + + // pre-defined for use when MapTransformation != 0 + if (!mapTransformRotation.Equals(0f)) + { + _worldToMapElements = Transform.WorldToMapMatrix( + Center, PixelWidth, PixelHeight, MapTransformRotation, Size, false).MatrixEntries; + + _worldToMapElementsCareAboutTransform =Transform.WorldToMapMatrix( + Center, PixelWidth, PixelHeight, MapTransformRotation, Size, true).MatrixEntries; + } + } + + /// + /// Creates an instance of this class based on the provided map + /// + /// The Map + public MapViewport(Map map) + : this(map.ID, map.SRID, map.Zoom, map.MapHeight, map.Envelope, map.Size, map.PixelAspectRatio, + map.MapTransform, map.MapTransformInverted, map.MapTransformRotation) + { + } + + /// + /// Gets a value indicating the which this viewport belongs to. + /// + public Guid ID { get; } + + /// + /// Gets a value indicating the spatial reference id of the map + /// + public int SRID { get; /*set;*/ } + + /// + /// Gets a value indicating the size of the map + /// + public Size Size { get; } + + /// + /// Gets the rectilinear extents of the map based on the current , + /// , map , and (optionally) the + /// If a is applied, the envelope CONTAINING the rotated view + /// will be returned (used by layers to spatially select data) and the aspect ratio will NOT be the + /// same as map . If aspect ratio is important then refer to + /// and + /// + public Envelope Envelope => _envelope.Copy(); + + /// + /// Gets a value indicating the transformation that has to be applied when + /// rendering the map + /// + public System.Drawing.Drawing2D.Matrix MapTransform + { + get + { + return new System.Drawing.Drawing2D.Matrix( + _mapTransformElements[0], + _mapTransformElements[1], + _mapTransformElements[2], + _mapTransformElements[3], + _mapTransformElements[4], + _mapTransformElements[5] + ); + } + } + + /// + /// Gets a value indicating the inverse transformation that is applied when + /// rendering the map + /// + public System.Drawing.Drawing2D.Matrix MapTransformInverted + { + get + { + return new System.Drawing.Drawing2D.Matrix( + _mapTransformInvertedElements[0], + _mapTransformInvertedElements[1], + _mapTransformInvertedElements[2], + _mapTransformInvertedElements[3], + _mapTransformInvertedElements[4], + _mapTransformInvertedElements[5] + ); + } + } + + /// + /// Map rotation in degrees (defined by ) + /// + public float MapTransformRotation { get; } + + /// + /// Cached affine transformation used to transform world coordinates from apparent rotated coordinate frame (ie MapTransformRotation != 0) + /// to image space. Unlike MapTransform, this matrix defines a complete transformation from World to Image taking into account MapRotation. + /// 2 variants are available, depending on whether or not map rotation has already been applied. + /// + internal AffineTransformation WorldToMapTransform(bool careAboutTransform) + { + if (careAboutTransform) + return new AffineTransformation( + _worldToMapElementsCareAboutTransform[0], + _worldToMapElementsCareAboutTransform[1], + _worldToMapElementsCareAboutTransform[2], + _worldToMapElementsCareAboutTransform[3], + _worldToMapElementsCareAboutTransform[4], + _worldToMapElementsCareAboutTransform[5] + ); + else + return new AffineTransformation( + _worldToMapElements[0], + _worldToMapElements[1], + _worldToMapElements[2], + _worldToMapElements[3], + _worldToMapElements[4], + _worldToMapElements[5] + ); + } + + /// + /// Gets a value indicating the center of the map viewport + /// + public Coordinate Center => _center.Copy(); + + /// + /// Gets a value indicating the zoom of the map viewport + /// + /// This value is identical to + public double Zoom { get; /*set;*/ } + + /// + /// Gets a value indicating the height of the map viewport in world units + /// + public double MapHeight { get; } + + /// + /// Gets a value indicating the width of the map viewport in world units + /// + /// This value is equal to + private double MapWidth => Zoom; + + /// + /// Applicable to non-rotated views only, returning the minimum X value of the map viewport in world units + /// + public double Left { get; } + + /// + /// Applicable to non-rotated views only, returning the maximum Y value of the map viewport in world units + /// + public double Top { get; } + + /// + /// Gets or sets the aspect-ratio of the pixel scales. A value less than + /// 1 will make the map stretch upwards, and larger than 1 will make it smaller. + /// + /// Throws an argument exception when value is 0 or less. + public double PixelAspectRatio { get; } + + /// + /// Returns the width of a pixel in world coordinate units. + /// + public double PixelWidth { get; } + + /// + /// Returns the height of a pixel in world coordinate units. + /// + public double PixelHeight { get; } + + /// + /// Function to compute the denominator of the viewport's scale when using a given resolution. + /// + /// The resolution + /// The scale's denominator + public double GetMapScale(int dpi) + { + if (_lastDpi != dpi) + { + lock (_lockMapScale) + if (_lastDpi != dpi) + { + _mapScale = ScaleCalculations.CalculateScaleNonLatLong(Zoom, Size.Width, 1, dpi); + _lastDpi = dpi; + } + } + + return _mapScale; + } + + /// + /// Converts an array of world coordinates to image coordinates based on the current , , + /// map , and (optionally) the . + /// + /// Coordinate array in world coordinates + /// Indicates whether should be applied. True for typical coordinate calcs, + /// False when rendering to image as the Graphics object has already applied the MapTransform + /// PointF array in image coordinates + public PointF[] WorldToImage(Coordinate[] coordinates, bool careAboutMapTransform = false) + { + // see WorldToImage discussion in Map.cs. This is a slightly shortened form using cached values. + if (MapTransformRotation.Equals(0f)) + return Transform.WorldToMap(coordinates, Left, Top, PixelWidth, PixelHeight); + + var matrix = WorldToMapTransform(careAboutMapTransform); + return Transform.WorldToMap(coordinates, matrix); + } + + /// + /// Converts a point in world coordinates to image coordinates based on the current , , + /// map , and (optionally) the . + /// + /// Point in world coordinates + /// Indicates whether should be applied. When rendering to image, + /// the Graphics object has usually applied MapTransform + /// PointF in image coordinates + public PointF WorldToImage(Coordinate p, bool careAboutMapTransform = false) + { + var points = WorldToImage(new Coordinate[] {p}, careAboutMapTransform); + return points[0]; + } + + /// + /// Converts a point array from image coordinates to world coordinates based on the current , , + /// map , and (optionally) the . + /// + /// Point array in image coordinates. Note: if you wish to preserve the input values then + /// you must clone the point array as it will be modified if a MapTransform is applied + /// Indicates whether should be applied. + /// Point array in world coordinates + public Coordinate[] ImageToWorld(PointF[] points, bool careAboutMapTransform = false) + { + if (careAboutMapTransform && !MapTransformRotation.Equals(0f)) + using (var transformInv = MapTransformInverted) + transformInv.TransformPoints(points); + + return Transform.MapToWorld(points, Center, Zoom, MapHeight, PixelWidth, PixelHeight); + } + + /// + /// Converts a point from image coordinates to world coordinates based on the current , , + /// map , and (optionally) the . + /// + /// Point in image coordinates. Note: if you wish to preserve the input value then + /// you must clone the point as it will be modified if a MapTransform is applied + /// Indicates whether should be applied. + /// Point in world coordinates + public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform = false) + { + var pts = ImageToWorld(new PointF[] {p}, careAboutMapTransform); + return pts[0]; + } + + /// + /// temporarily retained for benchmarking purposes only + /// + [Obsolete] + public PointF WorldToImageOld(Coordinate p, bool careAboutMapTransform) + { + var pTmp = WorldToImage(p); + if (!careAboutMapTransform) + return pTmp; + + var pts = new[] { pTmp }; + //Monitor.Enter(_mapTransform); + using (var mapTransform = MapTransform) + { + if (mapTransform.IsIdentity == false) + { + mapTransform.TransformPoints(pts); + } + } + //Monitor.Exit(_mapTransform); + + return pts[0]; + } + + /// + /// temporarily retained for benchmarking purposes only + /// + [Obsolete] + public PointF WorldToImageOld(Coordinate p) + { + if (p.IsEmpty()) + return PointF.Empty; + + double x = (p.X - Left) / PixelWidth; + if (double.IsNaN(x)) + return PointF.Empty; + + double y = (Top - p.Y) / PixelHeight; + if (double.IsNaN(y)) + return PointF.Empty; + + return new PointF((float)x, (float)y); + } + + /// + /// Creates a map viewport from a given map + /// + /// The map + /// + public static implicit operator MapViewport(Map map) + { + return new MapViewport(map); + } + } +} diff --git a/SharpMap/Utilities/GeoSpatialMath.cs b/SharpMap/Utilities/GeoSpatialMath.cs index 307f6da7..e658a6d4 100644 --- a/SharpMap/Utilities/GeoSpatialMath.cs +++ b/SharpMap/Utilities/GeoSpatialMath.cs @@ -1,122 +1,139 @@ -using System; - -namespace SharpMap.Utilities -{ - /// - /// A - /// - public static class GeoSpatialMath - { - /// - /// Conversion factor degrees to radians - /// - public const double DegToRad = Math.PI/180d; //0.01745329252; // Convert Degrees to Radians - - /// - /// Meters per inch - /// - public const double MetersPerInch = 0.0254; - - /// - /// Meters per mile - /// - public const double MetersPerMile = 1609.347219; - - /// - /// Miles per degree at equator - /// - public const double MilesPerDegreeAtEquator = 69.171; - - /// - /// Meters per degree at equator - /// - public const double MetersPerDegreeAtEquator = MetersPerMile * MilesPerDegreeAtEquator; - - /// - /// Calculate the distance between 2 points on the great circle - /// - /// The first longitue value - /// The latitude value for - /// The second longitue value - /// The latitude value for - /// The distance in meters - public static double GreatCircleDistance(double lon1, double lat1, double lon2, double lat2) - { - var lonDistance = DiffLongitude(lon1, lon2); - var arg1 = Math.Sin(lat1*DegToRad)*Math.Sin(lat2*DegToRad); - var arg2 = Math.Cos(lat1*DegToRad)*Math.Cos(lat2*DegToRad)*Math.Cos(lonDistance*DegToRad); - - return MetersPerDegreeAtEquator*Math.Acos(arg1 + arg2)/DegToRad; - } - - /// - /// Calculate the great circle distance between 2 points (ie the shortest distance on the sphere) - /// - /// The first longitue value - /// The second longitue value - /// The common latitued value for and - /// The distance in meters - public static double GreatCircleDistance(double lon1, double lon2, double lat) - { - var lonDistance = DiffLongitude(lon1, lon2); - lat = Math.Abs(lat); - if (lat >= 90.0) - lat = 89.999; - var distance = Math.Cos(lat*DegToRad)*MetersPerDegreeAtEquator*lonDistance; - return distance; - } - - /// - /// Calculate the great circle distance between 2 points without constraining longitudinal REFLEX angle 0-180deg (ie supports angles > 180 deg). - /// Typically used to support scale calculations on a global projection from longitude -180 to +180 (or even greater when zoomed out), - /// this will NOT be the shortest distance on the sphere when longitudinal angle > 180 degrees. - /// - /// The first longitude value - /// The second longitude value - /// The common latitude value for and - /// The distance in meters from LHS to RHS of a global projection. - /// This will NOT the shortest distance on sphere for longitudinal REFLEX (> 180deg) angles - public static double GreatCircleDistanceReflex(double lon1, double lon2, double lat) - { - var lonDistance = Math.Abs(lon2 - lon1); - lat = Math.Abs(lat); - if (lat >= 90.0) - lat = 89.999; - var distance = Math.Cos(lat * DegToRad) * MetersPerDegreeAtEquator * lonDistance; - return distance; - } - - /// - /// Calculate the difference between two longitudal values constrained 0 - 180 deg - /// - /// The first longitue value in degrees - /// The second longitue value in degrees - /// The distance in degrees - public static double DiffLongitude(double lon1, double lon2) - { - double diff; - - if (lon1 > 180.0) - lon1 = 360.0 - lon1; - if (lon2 > 180.0) - lon2 = 360.0 - lon2; - - if ((lon1 >= 0.0) && (lon2 >= 0.0)) - diff = lon2 - lon1; - else if ((lon1 < 0.0) && (lon2 < 0.0)) - diff = lon2 - lon1; - else - { - // different hemispheres - if (lon1 < 0) - lon1 = -1 * lon1; - if (lon2 < 0) - lon2 = -1 * lon2; - diff = lon1 + lon2; - if (diff > 180.0) - diff = 360.0 - diff; - } - return diff; - } - } -} +using System; +using GeoAPI.Geometries; + +namespace SharpMap.Utilities +{ + /// + /// A + /// + public static class GeoSpatialMath + { + /// + /// Conversion factor degrees to radians + /// + public const double DegToRad = Math.PI/180d; //0.01745329252; // Convert Degrees to Radians + + /// + /// Meters per inch + /// + public const double MetersPerInch = 0.0254; + + /// + /// Meters per mile + /// + public const double MetersPerMile = 1609.347219; + + /// + /// Miles per degree at equator + /// + public const double MilesPerDegreeAtEquator = 69.171; + + /// + /// Meters per degree at equator + /// + public const double MetersPerDegreeAtEquator = MetersPerMile * MilesPerDegreeAtEquator; + + /// + /// Web Mercator SRID constant + /// + public const int WebMercatorSrid = 3857; + + /// + /// Web Mercator SRID constant + /// + public const double WebMercatorRadius = 6378137.0; + + /// + /// Web Mercator Domain as Envelope + /// + public static readonly Envelope WebMercatorEnv = new Envelope(-20037508.34,20037508.34,-20000000,20000000); + + + /// + /// Calculate the distance between 2 points on the great circle + /// + /// The first longitue value + /// The latitude value for + /// The second longitue value + /// The latitude value for + /// The distance in meters + public static double GreatCircleDistance(double lon1, double lat1, double lon2, double lat2) + { + var lonDistance = DiffLongitude(lon1, lon2); + var arg1 = Math.Sin(lat1*DegToRad)*Math.Sin(lat2*DegToRad); + var arg2 = Math.Cos(lat1*DegToRad)*Math.Cos(lat2*DegToRad)*Math.Cos(lonDistance*DegToRad); + + return MetersPerDegreeAtEquator*Math.Acos(arg1 + arg2)/DegToRad; + } + + /// + /// Calculate the great circle distance between 2 points (ie the shortest distance on the sphere) + /// + /// The first longitue value + /// The second longitue value + /// The common latitued value for and + /// The distance in meters + public static double GreatCircleDistance(double lon1, double lon2, double lat) + { + var lonDistance = DiffLongitude(lon1, lon2); + lat = Math.Abs(lat); + if (lat >= 90.0) + lat = 89.999; + var distance = Math.Cos(lat*DegToRad)*MetersPerDegreeAtEquator*lonDistance; + return distance; + } + + /// + /// Calculate the great circle distance between 2 points without constraining longitudinal REFLEX angle 0-180deg (ie supports angles > 180 deg). + /// Typically used to support scale calculations on a global projection from longitude -180 to +180 (or even greater when zoomed out), + /// this will NOT be the shortest distance on the sphere when longitudinal angle > 180 degrees. + /// + /// The first longitude value + /// The second longitude value + /// The common latitude value for and + /// The distance in meters from LHS to RHS of a global projection. + /// This will NOT the shortest distance on sphere for longitudinal REFLEX (> 180deg) angles + public static double GreatCircleDistanceReflex(double lon1, double lon2, double lat) + { + var lonDistance = Math.Abs(lon2 - lon1); + lat = Math.Abs(lat); + if (lat >= 90.0) + lat = 89.999; + var distance = Math.Cos(lat * DegToRad) * MetersPerDegreeAtEquator * lonDistance; + return distance; + } + + /// + /// Calculate the difference between two longitudal values constrained 0 - 180 deg + /// + /// The first longitue value in degrees + /// The second longitue value in degrees + /// The distance in degrees + public static double DiffLongitude(double lon1, double lon2) + { + double diff; + + if (lon1 > 180.0) + lon1 = 360.0 - lon1; + if (lon2 > 180.0) + lon2 = 360.0 - lon2; + + if ((lon1 >= 0.0) && (lon2 >= 0.0)) + diff = lon2 - lon1; + else if ((lon1 < 0.0) && (lon2 < 0.0)) + diff = lon2 - lon1; + else + { + // different hemispheres + if (lon1 < 0) + lon1 = -1 * lon1; + if (lon2 < 0) + lon2 = -1 * lon2; + diff = lon1 + lon2; + if (diff > 180.0) + diff = 360.0 - diff; + } + return diff; + } + } +} diff --git a/SharpMap/Utilities/Transform.cs b/SharpMap/Utilities/Transform.cs index 07b8beea..9735120c 100644 --- a/SharpMap/Utilities/Transform.cs +++ b/SharpMap/Utilities/Transform.cs @@ -1,90 +1,196 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System.Drawing; -using GeoAPI.Geometries; - -namespace SharpMap.Utilities -{ - /// - /// Class for transforming between world and image coordinate - /// - public class Transform - { - /// - /// Transforms from image coordinates to world coordinate system (WCS). - /// NOTE: This method DOES NOT take the MapTransform property into account (use instead) - /// - /// Point in image coordinate system - /// Map reference - /// Point in WCS - public static Coordinate MapToWorld(PointF p, MapViewport map) - { - if (map.Center.IsEmpty() || double.IsNaN(map.MapHeight)) - { - return new Coordinate(0, 0); - } - var ul = new Coordinate(map.Center.X - map.Zoom * .5, map.Center.Y + map.MapHeight * .5); - return new Coordinate(ul.X + p.X * map.PixelWidth, - ul.Y - p.Y * map.PixelHeight); - } - - /// - /// Transforms from world coordinate system (WCS) to image coordinates - /// NOTE: This method DOES NOT take the MapTransform property into account (use instead) - /// - /// Point in WCS - /// Map reference - /// Point in image coordinates - public static PointF WorldtoMap(Coordinate p, Map map) - { - //if (map.MapTransform != null && !map.MapTransform.IsIdentity) - // map.MapTransform.TransformPoints(new System.Drawing.PointF[] { p }); - if (p.IsEmpty()) - return PointF.Empty; - - var result = new PointF(); - - var height = (map.Zoom * map.Size.Height) / map.Size.Width; - var left = map.Center.X - map.Zoom * 0.5; - var top = map.Center.Y + height * 0.5 * map.PixelAspectRatio; - result.X = (float)((p.X - left) / map.PixelWidth); - result.Y = (float)((top - p.Y) / map.PixelHeight); - if (double.IsNaN(result.X) || double.IsNaN(result.Y)) - result = PointF.Empty; - return result; - } - - /// - /// Transforms from image coordinates to world coordinate system (WCS). - /// NOTE: This method DOES NOT take the MapTransform property into account (use instead) - /// - /// Point in image coordinate system - /// Map reference - /// Point in WCS - public static Coordinate MapToWorld(PointF p, Map map) - { - if (map.Center.IsEmpty() || double.IsNaN(map.MapHeight)) - { - return new Coordinate(0, 0); - } - var ul = new Coordinate(map.Center.X - map.Zoom * .5, map.Center.Y + map.MapHeight * .5); - return new Coordinate(ul.X + p.X * map.PixelWidth, - ul.Y - p.Y * map.PixelHeight); - } - } -} \ No newline at end of file +// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using System; +using System.Drawing; +using GeoAPI.Geometries; +using NetTopologySuite.Geometries.Utilities; + +namespace SharpMap.Utilities +{ + /// + /// Class for transforming between world and image coordinate + /// + public class Transform + { + /// + /// Am abbreviated transform from world coordinate system (WCS) to image coordinates + /// for use ONLY when MapTransformRotation == 0 + /// + /// Coordinate array in WCS + /// Minimum X value of non-rotated viewport in world coordinates + /// Maximum Y value of non-rotated viewport in world coordinates + /// Apparent width of pixel in world units + /// Apparent height of pixel in world units + /// Point array in image coordinates + internal static PointF[] WorldToMap(Coordinate[] coordinates, double worldLeft, double worldTop, + double pixelWidth, double pixelHeight) + { + // ONLY when MapTransFormRotation == 0 + var points = new PointF[coordinates.Length]; + for (var i = 0; i < coordinates.Length; i++) + { + var coord = coordinates[i]; + if (coord.IsEmpty() || double.IsNaN(coord.X) || double.IsNaN(coord.Y)) + { + points[i] = PointF.Empty; + } + else + { + double x = (coord.X - worldLeft) / pixelWidth; + double y = (worldTop - coord.Y) / pixelHeight; + points[i] = new PointF((float) x, (float) y); + } + } + return points; + } + + /// + /// Full affine transformation from world coordinate system (WCS) to image coordinates taking into + /// account Zoom, Pixel Width/Height, and MapTransformRotation. + /// + /// Coordinate array in WCS + /// Appropriate affine transformation as defined by + /// Point array in image coordinates + public static PointF[] WorldToMap(Coordinate[] coordinates, AffineTransformation matrix) + { + var points = new PointF[coordinates.Length]; + var transformed = new Coordinate(); + for (var i = 0; i < coordinates.Length; i++) + { + matrix.Transform(coordinates[i], transformed); + points[i] = new PointF((float)transformed.X, (float)transformed.Y); + } + return points; + } + + /// + /// Affine transformation defining complete transformation from world coordinate system (WCS) to image coordinates taking into + /// account Zoom, Pixel Width/Height, and MapTransformRotation. Additionally, if = false, + /// the viewport rotation will be reverted at the end of the transformation, to be re-applied by Graphics object when rendering. + /// + /// Map center in WCS + /// Width of pixel in world units + /// Height of pixel in world units + /// map rotation in degrees + /// Map Size when rendered + /// True for coordinate calculations, False if Graphics object will apply MapTransform + /// Affine Transformation + public static AffineTransformation WorldToMapMatrix(Coordinate worldCenter, + double pixelWidth, double pixelHeight, float mapTransformRotation, Size imageSize, + bool careAboutTransform) + { + var rad = NetTopologySuite.Utilities.Degrees.ToRadians(mapTransformRotation); + var trans = new AffineTransformation(); + trans.Compose(AffineTransformation.TranslationInstance(-worldCenter.X, -worldCenter.Y)); + trans.Compose(AffineTransformation.RotationInstance(-rad)); + trans.Compose(AffineTransformation.ScaleInstance(1 / pixelWidth, -1 / pixelHeight)); + trans.Compose(AffineTransformation.TranslationInstance(imageSize.Width * 0.5, imageSize.Height * 0.5)); + + if (!careAboutTransform) + { + // if we DON'T care about transform (implies that rotation in image space WILL be performed by graphics + // object once drawing of ALL objects has been completed) then need to revert rotation (ie MapTransform). + trans.Compose(AffineTransformation.RotationInstance(-rad, imageSize.Width * 0.5, imageSize.Height * 0.5)); + } + return trans; + } + + /// + /// Am abbreviated transform from image coordinates to world coordinate system (WCS) + /// for use ONLY when MapTransformRotation == 0 + /// + /// Point array in image coordinates + /// Map defining current view properties + public static Coordinate[] MapToWorld(PointF[] points, Map map) + { + return MapToWorld(points, map.Center, map.Zoom, map.MapHeight, map.PixelWidth, map.PixelHeight); + } + + + /// + /// Am abbreviated transform from image coordinates to world coordinate system (WCS) + /// for use ONLY when MapTransformRotation == 0 + /// + /// Point array in image coordinates + /// Map center in WCS + /// current map zoom (width) in world units + /// current map height in world units + /// Apparent width of pixel in world units + /// Apparent height of pixel in world units + internal static Coordinate[] MapToWorld(PointF[] points, Coordinate worldCenter, double mapZoom, + double mapHeight, double pixelWidth, double pixelHeight) + { + var coords = new Coordinate[points.Length]; + if (worldCenter.IsEmpty() || double.IsNaN(mapHeight)) + for (var i = 0; i < points.Length; i++) + coords[i] = new Coordinate(0, 0); + else + { + var ul = new Coordinate(worldCenter.X - mapZoom * .5,worldCenter.Y + mapHeight * .5); + for (var i = 0; i < points.Length; i++) + coords[i] = new Coordinate(ul.X + points[i].X * pixelWidth,ul.Y - points[i].Y * pixelHeight); + } + + return coords; + } + + /// + /// Transforms from world coordinate system (WCS) to image coordinates + /// NOTE: This method is only applicable when MapTransformRotation = 0. + /// + /// Point in WCS + /// Map reference + /// Point in image coordinates + [Obsolete("Use WorldToMap(Coordinate[], Map)")] + public static PointF WorldToMap(Coordinate p, Map map) + { + var left = map.Center.X - map.Zoom * 0.5; + var top = map.Center.Y + map.MapHeight * 0.5; + var points = WorldToMap(new [] {p}, left, top, map.PixelWidth, map.PixelHeight); + return points[0]; + } + + /// + /// Transforms from image coordinates to world coordinate system (WCS). + /// NOTE: This method is only applicable when MapTransformRotation = 0. + /// + /// Point in image coordinate system + /// Map reference + /// Point in WCS + [Obsolete("Use MapToWorld(PointF[], Map)")] + public static Coordinate MapToWorld(PointF p, Map map) + { + var coords = MapToWorld(new [] {p}, map); + return coords[0]; + } + + /// + /// Transforms from image coordinates to world coordinate system (WCS). + /// NOTE: This method is only applicable when MapTransformRotation = 0. + /// + /// Point in image coordinate system + /// Map reference + /// Point in WCS + [Obsolete("Use MapToWorld(PointF[], MapViewport)")] + public static Coordinate MapToWorld(PointF p, MapViewport map) + { + var coords = MapToWorld(new [] {p}, map.Center, map.Zoom, map.MapHeight, map.PixelWidth, map.PixelHeight); + return coords[0]; + } + } +} From ab71104a5fc5688bb1279a1d04c8dc474695c827 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 13 Jul 2019 15:59:10 +0700 Subject: [PATCH 091/186] MapTransform updates to UI --- SharpMap.UI/Forms/MapBox.cs | 5289 ++++++++--------- SharpMap.UI/Forms/ToolBar/MapZoomToolStrip.cs | 1323 +++-- 2 files changed, 3304 insertions(+), 3308 deletions(-) diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index 6e351cc8..d66e912f 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -1,2649 +1,2640 @@ -// Copyright 2008-, SharpMapTeam -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -#define EnableMetafileClipboardSupport -/* - * Note: - * - * If you want to use MapBox control along with MapImage controls - * you have to define the compile time constant 'UseMapBox' in the - * properties dialog of this project. As a result you will have the - * MapImage control and the MapBox control included in your SharpMap.UI - * assembly. - * - * If you want to use MapBox control as a replacement of MapImage - * control you have to define the compile time constant 'UseMapBoxAsMapImage'. - * in the * properties dialog of this project. As a result you will have a - * MapImage control in your SharpMap.UI assembly which is actually this - * MapBox control. - * - * If you don't define any of the two compile time constants this control - * is omitted. - * - * FObermaier - */ -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using GeoAPI.Geometries; -using SharpMap.Forms.Tools; -using SharpMap.Layers; -using System.Drawing.Imaging; -using IGeometry = GeoAPI.Geometries.IGeometry; -using System.Threading; -using Common.Logging; -using System.Collections.Generic; -using SharpMap.Forms.ImageGenerator; - -namespace SharpMap.Forms -{ - /// - /// MapBox Class - MapBox control for Windows forms - /// - /// - /// The ExtendedMapImage control adds more than basic functionality to a Windows Form, such as dynamic pan, widow zoom and data query. - /// - [DesignTimeVisible(true)] -// ReSharper disable once PartialTypeWithSinglePart - public partial class MapBox : Control - { - protected override void OnInvalidated(InvalidateEventArgs e) - { - base.OnInvalidated(e); - _logger.Debug(t => t("Rectangle {0} invalidate", e.InvalidRect)); - } - - - private static readonly ILog _logger = LogManager.GetLogger(typeof (MapBox)); - private const double PrecisionTolerance = 0.00000001; - - static MapBox() { Map.Configure(); } - - #region PreviewModes enumerator - - // ReSharper disable UnusedMember.Local - /// - /// Preview modes - /// - public enum PreviewModes - { - /// - /// Best preview mode - /// - Best, - - /// - /// Fast preview mode - /// - Fast - } - - #endregion - - #region Position enumerators - - /// - /// Horizontal alignment enumeration - /// - private enum XPosition - { - Center = 0, - Right = 1, - Left = -1 - } - - /// - /// Vertical alignment enumeration - /// - private enum YPosition - { - Center = 0, - Top = -1, - Bottom = 1 - } - - // ReSharper restore UnusedMember.Local - - #endregion - - #region Tools enumerator - - /// - /// Map tools enumeration - /// - public enum Tools - { - /// - /// Pan - /// - Pan, - - /// - /// Zoom in - /// - ZoomIn, - - /// - /// Zoom out - /// - ZoomOut, - - /// - /// Query bounding boxes for intersection - /// - QueryBox, - - /// - /// Query tool - /// - [Obsolete ("Use QueryBox")] - Query = QueryBox, - - /// - /// Attempt true intersection query on geometry - /// - QueryPoint, - - /// - /// Attempt true intersection query on geometry - /// - [Obsolete ("Use QueryPoint")] - QueryGeometry = QueryPoint, - - ///// - ///// Attempt true intersection query on polygonal geometry - ///// - //QueryPolygon, - - /// - /// Zoom window tool - /// - ZoomWindow, - - /// - /// Define Point on Map - /// - DrawPoint, - - /// - /// Define Line on Map - /// - DrawLine, - - /// - /// Define Polygon on Map - /// - DrawPolygon, - - /// - /// No active tool - /// - None, - - /// - /// Custom tool, implementing - /// - Custom - } - - /// - /// Enumeration of map query types - /// - public enum MapQueryType - { - /// - /// Layer set in QueryLayerIndex is the only layers Queried (Default) - /// - LayerByIndex, - - /// - /// All layers are queried - /// - AllLayers, - - /// - /// All visible layers are queried - /// - VisibleLayers, - - /// - /// Visible layers are queried from Top and down until a layer with an intersecting feature is found - /// - TopMostLayer - }; - - - #endregion - - #region Events - - /// - /// MouseEventtype fired from the MapImage control - /// - /// - /// - public delegate void MouseEventHandler(Coordinate worldPos, MouseEventArgs imagePos); - - /// - /// Fires when mouse moves over the map - /// - public new event MouseEventHandler MouseMove; - - /// - /// Fires when map received a mouseclick - /// - public new event MouseEventHandler MouseDown; - - /// - /// Fires when mouse is released - /// - public new event MouseEventHandler MouseUp; - - /// - /// Fired when mouse is dragging - /// - public event MouseEventHandler MouseDrag; - - /// - /// Fired when the map has been refreshed - /// - public event EventHandler MapRefreshed; - - /// - /// Fired when the map is about to change - /// - public event CancelEventHandler MapChanging; - - /// - /// Fired when the map has been changed - /// - public event EventHandler MapChanged; - - /// - /// Eventtype fired when the zoom was or are being changed - /// - /// - public delegate void MapZoomHandler(double zoom); - - /// - /// Fired when the zoom value has changed - /// - public event MapZoomHandler MapZoomChanged; - - /// - /// Fired when the map is being zoomed - /// - public event MapZoomHandler MapZooming; - - /// - /// Eventtype fired when the map is queried - /// - /// - public delegate void MapQueryHandler(Data.FeatureDataTable data); - - /// - /// Fired when the map is queried - /// - /// Will be fired one time for each layer selected for query depending on QueryLayerIndex and QuerySettings - /// - public event MapQueryHandler MapQueried; - - /// - /// Fired when Map is Queried before the first MapQueried event is fired for that query - /// - public event EventHandler MapQueryStarted; - - /// - /// Fired when Map is Queried after the last MapQueried event is fired for that query - /// - public event EventHandler MapQueryDone; - - - /// - /// Eventtype fired when the center has changed - /// - /// - public delegate void MapCenterChangedHandler(Coordinate center); - - /// - /// Fired when the center of the map has changed - /// - public event MapCenterChangedHandler MapCenterChanged; - - /// - /// Eventtype fired befor the active map tool change - /// - /// pre-tool - /// new tool - /// a cancel indicator - public delegate void ActiveToolChangingHandler(Tools toolPre, Tools toolNew, CancelEventArgs cea); - - /// - /// Fired befor the active map tool change - /// - public event ActiveToolChangingHandler ActiveToolChanging; - - /// - /// Eventtype fired when the map tool is changed - /// - /// - public delegate void ActiveToolChangedHandler(Tools tool); - - /// - /// Fired when the active map tool has changed - /// - public event ActiveToolChangedHandler ActiveToolChanged; - - /// - /// Eventtype fired when a new geometry has been defined - /// - /// New Geometry - public delegate void GeometryDefinedHandler(IGeometry geometry); - - /// - /// Fired when a new polygon has been defined - /// - public event GeometryDefinedHandler GeometryDefined; - - #endregion - - private readonly IMapBoxImageGenerator _miRenderer; - - private static int m_defaultColorIndex; - - private static readonly Color[] _defaultColors ={ - Color.DarkRed, - Color.DarkGreen, - Color.DarkBlue, - Color.Orange, - Color.Cyan, - Color.Black, - Color.Purple, - Color.Yellow, - Color.LightBlue, - Color.Fuchsia - }; - - /* - private const float MinDragScalingBeforeRegen = 0.3333f; - private const float MaxDragScalingBeforeRegen = 3f; - */ - private readonly ProgressBar _progressBar; - -#if DEBUG - private readonly Stopwatch _watch = new Stopwatch(); -#endif - - //private bool m_IsCtrlPressed; - private IMapTool _currentTool; - private double _wheelZoomMagnitude = -2; - private Tools _activeTool; - private double _fineZoomFactor = 10; - private Map _map; - private int _queryLayerIndex; - private Point _dragStartPoint; - private Point _dragEndPoint; - //private Bitmap _dragImage; - private Rectangle _rectangle = Rectangle.Empty; - private bool _dragging; - private readonly SolidBrush _rectangleBrush = new SolidBrush(Color.FromArgb(210, 244, 244, 244)); - private readonly Pen _rectanglePen = new Pen(Color.FromArgb(244, 244, 244), 1); - - private float _scaling; - //private Image _image = new Bitmap(1, 1); - //private Image _imageBackground = new Bitmap(1, 1); - //private Image _imageStatic = new Bitmap(1, 1); - //private Image _imageVariable = new Bitmap(1, 1); - //private Envelope _imageEnvelope = new Envelope(0, 1, 0, 1); - //private int _imageGeneration; - - private readonly object _mapLocker = new object(); - - private int _needToRefreshAfterWheel; - private PreviewModes _previewMode; - //private bool _isRefreshing; - private List _pointArray = new List(); - private bool _showProgress; - private bool _zoomToPointer = true; - private bool _setActiveToolNoneDuringRedraw; - private bool _shiftButtonDragRectangleZoom = true; - private bool _focusOnHover; - private bool _panOnClick = true; - private float _queryGrowFactor = 5f; - private MapQueryType _mapQueryMode = MapQueryType.LayerByIndex; - - private readonly IMessageFilter _mousePreviewFilter; - - /// - /// Assigns a random color to a vector layers style - /// - /// - public static void RandomizeLayerColors(VectorLayer layer) - { - layer.Style.EnableOutline = true; - layer.Style.Fill = new SolidBrush(Color.FromArgb(80, _defaultColors[m_defaultColorIndex%_defaultColors.Length])); - layer.Style.Outline = - new Pen( - Color.FromArgb(100, - _defaultColors[ - (m_defaultColorIndex + ((int) (_defaultColors.Length*0.5)))%_defaultColors.Length]), - 1f); - m_defaultColorIndex++; - } - - /// - /// Gets or sets a value on whether to report progress of map generation - /// - [Description("Define if the progress Bar is shown")] - [Category("Appearance")] - public bool ShowProgressUpdate - { - get { return _showProgress; } - - set - { - _showProgress = value; - _progressBar.Visible = _showProgress; - } - } - - /// - /// Gets or sets whether the "go-to-cursor-on-click" feature is enabled or not (even if enabled it works only if the active tool is Pan) - /// - [Description( - "Sets whether the \"go-to-cursor-on-click\" feature is enabled or not (even if enabled it works only if the active tool is Pan)" - )] - [DefaultValue(true)] - [Category("Behavior")] - public bool PanOnClick - { - get { return _panOnClick; } - set - { - ActiveTool = Tools.Pan; - _panOnClick = value; - - } - } - - /// - /// Sets whether the mapcontrol should automatically grab focus when mouse is hovering the control - /// - [Description("Sets whether the mapcontrol should automatically grab focus when mouse is hovering the control")] - [DefaultValue(false)] - [Category("Behavior")] - public bool TakeFocusOnHover - { - get { return _focusOnHover; } - set { _focusOnHover = value; } - } - - /// - /// Sets whether the mouse wheel should zoom to the pointer location - /// - [Description("Sets whether the mouse wheel should zoom to the pointer location")] - [DefaultValue(true)] - [Category("Behavior")] - public bool ZoomToPointer - { - get { return _zoomToPointer; } - set { _zoomToPointer = value; } - } - - /// - /// Sets ActiveTool to None (and changing cursor) while redrawing the map - /// - [Description("Sets ActiveTool to None (and changing cursor) while redrawing the map")] - [DefaultValue(false)] - [Category("Behavior")] - public bool SetToolsNoneWhileRedrawing - { - get { return _setActiveToolNoneDuringRedraw; } - set { _setActiveToolNoneDuringRedraw = value; } - } - - /// - /// Gets or sets the number of pixels by which a bounding box around the query point should be "grown" prior to perform the query - /// - /// Does not apply when querying against boxes. - [Description( - "Gets or sets the number of pixels by which a bounding box around the query point should be \"grown\" prior to perform the query" - )] - [DefaultValue(5)] - [Category("Behavior")] - public float QueryGrowFactor - { - get { return _queryGrowFactor; } - set - { - if (value < 0) value = 0; - //if (value > 10) - _queryGrowFactor = value; - } - } - - - /// - /// Gets or sets the value of the back color for the selection rectangle - /// - [Description("The color of selecting rectangle.")] - [Category("Appearance")] - public Color SelectionBackColor - { - get { return _rectangleBrush.Color; } - set - { - //if (value != m_RectangleBrush.Color) - _rectangleBrush.Color = value; - } - } - - /// - /// Gets or sets the value of the border color for the selection rectangle - /// - [Description("The color of selectiong rectangle frame.")] - [Category("Appearance")] - public Color SelectionForeColor - { - get { return _rectanglePen.Color; } - set - { - //if (value != m_RectanglePen.Color) - _rectanglePen.Color = value; - } - } - - /// - /// Gets the current map image - /// - [Description("The map image currently visualized.")] - [Category("Appearance")] - public Image Image - { - get - { - return _miRenderer.Image; - //GetImagesAsyncEnd(null); - //return _image; - } - } - - /// - /// Gets or sets the amount which a single movement of the mouse wheel zooms by. - /// - [Description( - "The amount which a single movement of the mouse wheel zooms by. (Negative values are similar as OpenLayers/Google, positive are like ArcMap" - )] - [DefaultValue(-2)] - [Category("Behavior")] - public double WheelZoomMagnitude - { - get { return _wheelZoomMagnitude; } - set { _wheelZoomMagnitude = value; } - } - - /// - /// Gets or sets the mode used to create preview image while panning or zooming. - /// - [Description("Mode used to create preview image while panning or zooming.")] - [DefaultValue(PreviewModes.Best)] - [Category("Behavior")] - public PreviewModes PreviewMode - { - get { return _previewMode; } - set - { - if (!_dragging) - _previewMode = value; - } - } - - /// - /// Gets or sets a value indicating the amount which the WheelZoomMagnitude is divided by - /// when the Control key is pressed. A number greater than 1 decreases - /// the zoom, and less than 1 increases it. A negative number reverses it. - /// - [Description("The amount which the WheelZoomMagnitude is divided by " + - "when the Control key is pressed. A number greater than 1 decreases " + - "the zoom, and less than 1 increases it. A negative number reverses it.")] - [DefaultValue(10)] - [Category("Behavior")] - public double FineZoomFactor - { - get { return _fineZoomFactor; } - set { _fineZoomFactor = value; } - } - - /// - /// Gets or sets a value that enables shortcut to rectangle-zoom by holding down shift-button and drag rectangle - /// - [Description("Enables shortcut to rectangle-zoom by holding down shift-button and drag rectangle")] - [DefaultValue(true)] - [Category("Behavior")] - public bool EnableShiftButtonDragRectangleZoom - { - get { return _shiftButtonDragRectangleZoom; } - set { _shiftButtonDragRectangleZoom = value; } - } - - /// - /// Gets or sets the map reference - /// - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Map Map - { - get { return _map; } - set - { - if (value != _map) - { - var cea = new CancelEventArgs(false); - OnMapChanging(cea); - if (cea.Cancel) return; - - _map = value; - - OnMapChanged(EventArgs.Empty); - } - } - } - - /// - /// Gets or sets the index of the active query layer - /// - public int QueryLayerIndex - { - get { return _queryLayerIndex; } - set { _queryLayerIndex = value; } - } - - /// - /// Gets or sets the mapquerying mode - /// - public MapQueryType MapQueryMode - { - get { return _mapQueryMode; } - set { _mapQueryMode = value; } - } - - /// - /// Sets the active map tool - /// - public Tools ActiveTool - { - get { return _activeTool; } - set - { - var cea = new CancelEventArgs(false); - OnActiveToolChanging(ActiveTool, value, cea); - if (cea.Cancel) - { - if (CustomTool != null) - CustomTool.Enabled = true; - return; - } - - _activeTool = value; - - SetCursor(); - - _pointArray = null; - - OnActiveToolChanged(value); - } - } - - /// - /// Event invoker for the - /// - /// pre-tool - /// new tool - /// a cancel indicator - protected virtual void OnActiveToolChanging(Tools toolPre, Tools toolNew, CancelEventArgs cea) - { - if (CustomTool != null) - CustomTool.Enabled = false; - var handler = ActiveToolChanging; - if (handler != null) - handler(toolPre, toolNew, cea); - } - - /// - /// Event invoker for the event - /// - /// The tool - protected virtual void OnActiveToolChanged(Tools activeTool) - { - if (CustomTool != null) - CustomTool.Enabled = true; - var handler = ActiveToolChanged; - if (handler != null) - handler(activeTool); - } - - /// - /// Gets or sets a value indicating the currently active custom tool - /// - public IMapTool CustomTool - { - get { return _currentTool; } - set - { - if (value == _currentTool) - return; - - var raiseActiveToolChanged = ActiveTool == Tools.Custom && value != null; - - _currentTool = value; - ActiveTool = _currentTool != null - ? Tools.Custom - : Tools.None; - - if (_currentTool != null) - _currentTool.Map = _map; - - if (raiseActiveToolChanged) - OnActiveToolChanged(ActiveTool); - } - } - - -#pragma warning disable 1587 -#if DEBUG - /// - /// TimeSpan for refreshing maps - /// - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public TimeSpan LastRefreshTime { get; set; } -#endif - - /// - /// Initializes a new map - /// - public MapBox() -#pragma warning restore 1587 - { - - SetStyle( - ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); - base.DoubleBuffered = true; - - _map = new Map(ClientSize); - //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; - //_map.RefreshNeeded += HandleRefreshNeeded; - //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; - - _progressBar = new ProgressBar - { - Style = ProgressBarStyle.Marquee, - Location = new Point(2, 2), - Size = new Size(50, 10) - }; - Controls.Add(_progressBar); - - _miRenderer = new LegacyMapBoxImageGenerator(this, _progressBar); - - _activeTool = Tools.None; - LostFocus += HandleMapBoxLostFocus; - _progressBar.Visible = ShowProgressUpdate; - - _mousePreviewFilter = new MouseWheelGrabber(this); - Application.AddMessageFilter(_mousePreviewFilter); - } - - protected override void OnSizeChanged(EventArgs e) - { - if (Map != null) - { - if (Size != Map.Size) - { - Map.Size = Size; - Refresh(); - } - } - base.OnSizeChanged(e); - } - - /// - /// Dispose method - /// - /// A parameter indicating that this method is called from either a call to (true) - /// or the finalizer (false) - protected override void Dispose(bool disposing) - { - if (_miRenderer.IsDisposed || IsDisposed) - return; - - LostFocus -= HandleMapBoxLostFocus; - if (_mousePreviewFilter != null) - Application.RemoveMessageFilter(_mousePreviewFilter); - - if (_map != null) - { - // special handling to prevent spurious VariableLayers events - _map.VariableLayers.Interval = 0; - //_map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; - //_map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; - //_map.RefreshNeeded -= HandleRefreshNeeded; - } - - - lock (_mapLocker) - { - _miRenderer.Dispose(); - _map = null; - - //if (_imageStatic != null) - //{ - // _imageStatic.Dispose(); - // _imageStatic = null; - //} - //if (_imageBackground != null) - //{ - // _imageBackground.Dispose(); - // _imageBackground = null; - //} - //if (_imageVariable != null) - //{ - // _imageVariable.Dispose(); - // _imageVariable = null; - //} - //if (_image != null) - //{ - // _image.Dispose(); - // _image = null; - //} - - //if (_dragImage != null) - //{ - // _dragImage.Dispose(); - // _dragImage = null; - //} - - if (_rectanglePen != null) - { - _rectanglePen.Dispose(); - } - if (_rectangleBrush != null) - { - _rectangleBrush.Dispose(); - } - - base.Dispose(disposing); - } - } - - #region event handling - - /// - /// Handles LostFocus event - /// - /// - /// - private void HandleMapBoxLostFocus(object sender, EventArgs e) - { - if (!_dragging) return; - - _dragging = false; - Invalidate(ClientRectangle); - } - - ///// - ///// Handles need to requery of variable layers - ///// - ///// - ///// - //private void HandleVariableLayersRequery(object sender, EventArgs e) - //{ - // if (IsDisposed || _isDisposed) - // return; - - // Image oldRef; - // lock (_mapLocker) - // { - // if (_dragging) return; - // oldRef = _imageVariable; - // _imageVariable = GetMap(_map, _map.VariableLayers, LayerCollectionType.Variable, _map.Envelope); - // } - - // UpdateImage(false); - // if (oldRef != null) - // oldRef.Dispose(); - - // Invalidate(); - // Application.DoEvents(); - //} - -// private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, -// int sourceHeight, ImageAttributes imageAttributes) -// { -// lock (_backgroundImagesLocker) -// { -// try -// { -// var min = Point.Round(_map.WorldToImage(box.Min())); -// var max = Point.Round(_map.WorldToImage(box.Max())); - -// if (IsDisposed == false && _isDisposed == false) -// { - -// using (var g = Graphics.FromImage(_imageBackground)) -// { - -// g.DrawImage(bm, -// new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)), -// 0, 0, -// sourceWidth, sourceHeight, -// GraphicsUnit.Pixel, -// imageAttributes); - -// } - -// UpdateImage(false); -// } -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// //this can be a GDI+ Hell Exception... -// } - -// } - -// } - - #endregion - -// private Image GetMap(Map map, LayerCollection layers, LayerCollectionType layerCollectionType, -// Envelope extent) -// { -// try -// { -// var width = Width; -// var height = Height; - -// if ((layers == null || layers.Count == 0 || width <= 0 || height <= 0)) -// { -// if (layerCollectionType == LayerCollectionType.Background) -// return new Bitmap(1, 1); -// return null; -// } - -// var retval = new Bitmap(width, height); - -// using (var g = Graphics.FromImage(retval)) -// { -// g.Clear(Color.Transparent); -// map.RenderMap(g, layerCollectionType, false, true); -// } - -// /*if (layerCollectionType == LayerCollectionType.Variable) -// retval.MakeTransparent(_map.BackColor); -// else if (layerCollectionType == LayerCollectionType.Static && map.BackgroundLayer.Count > 0) -// retval.MakeTransparent(_map.BackColor);*/ -// return retval; -// } -// catch (Exception ee) -// { -// _logger.Error("Error while rendering map", ee); - -// if (layerCollectionType == LayerCollectionType.Background) -// return new Bitmap(1, 1); -// return null; -// } -// } - - -// private readonly object _staticImagesLocker = new object(); -// private readonly object _backgroundImagesLocker = new object(); -// private readonly object _paintImageLocker = new object(); -// private readonly object _mapLocker = new object(); - -// private void GetImagesAsync(Envelope extent, int imageGeneration) -// { -// lock (_mapLocker) -// { -// if (_isDisposed) -// return; - -// if (imageGeneration < _imageGeneration) -// { -// /*we're to old*/ -// return; -// } -// var safeMap = _map.Clone(); -// _imageVariable = GetMap(safeMap, _map.VariableLayers, LayerCollectionType.Variable, extent); -// lock (_staticImagesLocker) -// { -// _imageStatic = GetMap(safeMap, _map.Layers, LayerCollectionType.Static, extent); -// } -// lock (_backgroundImagesLocker) -// { -// _imageBackground = GetMap(safeMap, _map.BackgroundLayer, LayerCollectionType.Background, extent); -// } -// } -// } - -// private class GetImageEndResult -// { -// public Tools? Tool { get; set; } -// public Envelope bbox { get; set; } -// public int generation { get; set; } -// } - -// private void GetImagesAsyncEnd(GetImageEndResult res) -// { -// // draw only if generation is larger than the current, else we have aldready drawn something newer -// // we must to check also IsHandleCreated because during disposal, the handle of the parent is detroyed sooner than progress bar's handle, -// // this leads to cross thread operation and exception because InvokeRequired returns false, but for the progress bar it is true. -// if (res == null || res.generation < _imageGeneration || _isDisposed || !IsHandleCreated) -// return; - - -// if (_logger.IsDebugEnabled) -// _logger.DebugFormat("{2}: {0} - {1}", res.generation, res.bbox, DateTime.Now); - - -// if ((_setActiveToolNoneDuringRedraw || ShowProgressUpdate) && InvokeRequired) -// { -// try -// { -// BeginInvoke(new MethodInvoker(() => GetImagesAsyncEnd(res))); - -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// } -// } -// else -// { -// try -// { -// var oldRef = _image; -// if (Width > 0 && Height > 0) -// { - -// var bmp = new Bitmap(Width, Height); - - -// using (var g = Graphics.FromImage(bmp)) -// { -// g.Clear(_map.BackColor); -// lock (_backgroundImagesLocker) -// { -// //Draws the background Image -// if (_imageBackground != null) -// { -// try -// { -// g.DrawImageUnscaled(_imageBackground, 0, 0); -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// } -// } -// } - -// //Draws the static images -// if (_staticImagesLocker != null) -// { -// try -// { -// if (_imageStatic != null) -// { -// g.DrawImageUnscaled(_imageStatic, 0, 0); -// } -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// } - -// } - -// //Draws the variable Images -// if (_imageVariable != null) -// { -// try -// { -// g.DrawImageUnscaled(_imageVariable, 0, 0); -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// } -// } - -// g.Dispose(); -// } - - -// lock (_paintImageLocker) -// { -// _image = bmp; -// _imageEnvelope = res.bbox; -// } -// } - -// if (res.Tool.HasValue) -// { -// if (_setActiveToolNoneDuringRedraw) -// ActiveTool = res.Tool.Value; - -// _dragEndPoint = new Point(0, 0); -// _isRefreshing = false; - -// if (_setActiveToolNoneDuringRedraw) -// Enabled = true; - -// if (ShowProgressUpdate) -// { -// _progressBar.Enabled = false; -// _progressBar.Visible = false; -// } -// } - -// lock (_paintImageLocker) -// { -// if (oldRef != null) -// oldRef.Dispose(); -// } - -// Invalidate(); -// } -// catch (Exception ex) -// { -// _logger.Warn(ex.Message, ex); -// } - -//#if DEBUG -// _watch.Stop(); -// LastRefreshTime = _watch.Elapsed; -//#endif - -// try -// { -// if (MapRefreshed != null) -// { -// MapRefreshed(this, null); -// } -// } -// catch (Exception ee) -// { -// //Trap errors that occured when calling the eventhandlers -// _logger.Warn("Exception while calling eventhandler", ee); -// } -// } -// } - - //private void UpdateImage(bool forceRefresh) - //{ - // if (_isDisposed || IsDisposed) - // return; - - // if (((_imageStatic == null && _imageVariable == null && _imageBackground == null) && !forceRefresh) || - // (Width == 0 || Height == 0)) return; - - // Envelope bbox = _map.Envelope; - // if (forceRefresh) // && _isRefreshing == false) - // { - // _isRefreshing = true; - // Tools oldTool = ActiveTool; - // if (_setActiveToolNoneDuringRedraw) - // { - // ActiveTool = Tools.None; - // Enabled = false; - // } - - // if (ShowProgressUpdate) - // { - // if (InvokeRequired) - // { - // _progressBar.BeginInvoke(new Action(p => - // { - // p.Visible = true; - // p.Enabled = true; - // }), _progressBar); - // } - // else - // { - // _progressBar.Visible = true; - // _progressBar.Enabled = true; - // } - // } - - // int generation = ++_imageGeneration; - // ThreadPool.QueueUserWorkItem( - // delegate - // { - // GetImagesAsync(bbox, generation); - // GetImagesAsyncEnd(new GetImageEndResult - // {Tool = oldTool, bbox = bbox, generation = generation}); - // }); - // } - // else - // { - // GetImagesAsyncEnd(new GetImageEndResult {Tool = null, bbox = bbox, generation = _imageGeneration}); - // } - //} - - - private void SetCursor() - { - if (InvokeRequired) - { - BeginInvoke(new MethodInvoker(SetCursor)); - return; - } - - switch (_activeTool) - { - case Tools.None: - Cursor = Cursors.Default; - break; - case Tools.Pan: - Cursor = Cursors.Hand; - break; - case Tools.QueryBox: - case Tools.QueryPoint: - Cursor = Cursors.Help; - break; - case Tools.ZoomIn: - case Tools.ZoomOut: - Cursor = Cursors.Cross; - break; - case Tools.DrawPoint: - case Tools.DrawLine: - case Tools.DrawPolygon: - Cursor = Cursors.Cross; - break; - case Tools.Custom: - Cursor = _currentTool.Cursor; - break; - } - } - - - /// - /// Refreshes the map - /// - public override void Refresh() - { - try - { - //Protect against cross-thread operations... - //We need this since we're modifying the cursor - if (InvokeRequired) - { - Invoke(new MethodInvoker(Refresh)); - return; - } -#if DEBUG - _watch.Reset(); - _watch.Start(); -#endif - if (_map != null) - { - _map.Size = ClientSize; - if ((_map.Layers == null || _map.Layers.Count == 0) && - (_map.BackgroundLayer == null || _map.BackgroundLayer.Count == 0) && - (_map.VariableLayers == null || _map.VariableLayers.Count == 0)) - ; //_image = null; - else - { - Cursor c = Cursor; - if (_setActiveToolNoneDuringRedraw) - { - Cursor = Cursors.WaitCursor; - } - - _miRenderer.Generate(); - if (_setActiveToolNoneDuringRedraw) - { - Cursor = c; - } - } - } - } - catch (Exception ex) - { - _logger.Warn(ex.Message, ex); - } - } - - - private static Boolean IsControlPressed - { - get { return (ModifierKeys & Keys.ControlKey) == Keys.ControlKey; } - } - - - private Point _lastHoverPostiton; - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnMouseHover(EventArgs e) - { - _logger.DebugFormat("Hover at {0}", MousePosition); - - // update the last hover position - _lastHoverPostiton = PointToClient(MousePosition); - - // If required test and grab focus - if (_focusOnHover) - TestAndGrabFocus(); - - // Invoke the base implementation - base.OnMouseHover(e); - - // Do we have a custom tool, execute it - if (UseCurrentTool) - { - var p = _map.ImageToWorld((_lastHoverPostiton)); - if (_currentTool.DoMouseHover(p)) - return; - } - } - - private void TestAndGrabFocus() - { - if (!Focused) - { - var isFocused = Focus(); - _logger.Debug("Focused: " + isFocused); - } - } - - /// - /// Raises the event. - /// - /// An that contains the event data. - protected override void OnMouseEnter(EventArgs e) - { - base.OnMouseEnter(e); - if (UseCurrentTool) - { - if (_currentTool.DoMouseEnter()) - return; - } - } - - /// - /// Raises the event. - /// - /// An that contains the event data. - protected override void OnMouseLeave(EventArgs e) - { - _logger.DebugFormat( "MouseLeave {0}", Name); - - base.OnMouseLeave(e); - if (UseCurrentTool) - { - if (_currentTool.DoMouseLeave()) - return; - } - } - - - private System.Timers.Timer _mouseWheelRefreshTimer; - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnMouseWheel(MouseEventArgs e) - { - _logger.DebugFormat("MouseWheel {0} ({1})", e.Location, e.Delta); - base.OnMouseWheel(e); - - if (_map != null) - { - // Do we have a custom tool - if (UseCurrentTool) - { - if (_currentTool.DoMouseWheel(_map.ImageToWorld(e.Location), e)) - return; - } - - var oldCenter = _map.Center; - var oldZoom = _map.Zoom; - var oldHeight = _map.MapHeight; - - var scale = (e.Delta / 120.0); - var scaleBase = 1 + (_wheelZoomMagnitude/(10*(IsControlPressed ? _fineZoomFactor : 1))); - - if (!ZoomToPointer) - // zoom in/out maintaining existing centre - _map.Zoom = oldZoom * Math.Pow(scaleBase, scale); - else - { - // preserve MAP cursor posn - var p = _map.ImageToWorld(new Point(e.X, e.Y), true); - - System.Drawing.Drawing2D.Matrix transform = new System.Drawing.Drawing2D.Matrix(); - transform.Translate((float)-p.X, (float)-p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); - transform.Scale((float)Math.Pow(scaleBase, scale), (float)Math.Pow(scaleBase, scale), System.Drawing.Drawing2D.MatrixOrder.Append); - transform.Translate((float)p.X, (float)p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); - - // NB zoom is independent of MapTransform. - var pts = new[] { new PointF((float)oldCenter.X, (float)oldCenter.Y), - new PointF((float)(oldCenter.X - 0.5 * oldZoom), (float)(oldCenter.Y - 0.5 * oldHeight)), - new PointF((float)(oldCenter.X + 0.5 * oldZoom), (float)(oldCenter.Y + 0.5 * oldHeight)) - }; - transform.TransformPoints(pts); - transform.Dispose(); - - // Subject to creep when map is rotated, but significant improvement over previous implementation - var newCenter = new Coordinate(pts[0].X, pts[0].Y); - var newZoom = pts[2].X - pts[1].X; - var box = new Envelope(pts[1].X, pts[2].X, pts[1].Y, pts[2].Y); - - //pre-checks to prevent mapViewPortGuard from adjusting centre upon reaching max extents - if (newZoom < _map.MinimumZoom || newZoom > _map.MaximumZoom) - return; - - if (_map.EnforceMaximumExtents && !_map.MaximumExtents.IsNull && !_map.MaximumExtents.Contains(box)) - return; - - //_map.Center = newCenter; - //_map.Zoom = newZoom; - - // more efficient that Center + Zoom - _map.ZoomToBox(box); - - } - - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) - { - Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); - OnMapCenterChanged(_map.Center); - } - - if (Math.Abs(_map.Zoom - oldZoom) > PrecisionTolerance) - { - Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); - OnMapZoomChanged(_map.Zoom); - } - - Invalidate(); - - if (_mouseWheelRefreshTimer == null) - { - _mouseWheelRefreshTimer = new System.Timers.Timer(50); - _mouseWheelRefreshTimer.Elapsed += TimerUpdate; - _mouseWheelRefreshTimer.Enabled = true; - _mouseWheelRefreshTimer.AutoReset = false; - _mouseWheelRefreshTimer.Start(); - } - else - { - _mouseWheelRefreshTimer.Stop(); - _mouseWheelRefreshTimer.Start(); - } - } - } - - private void TimerUpdate(object state, System.Timers.ElapsedEventArgs args) - { - _logger.Debug("TimerRefresh"); - if (Interlocked.CompareExchange(ref _needToRefreshAfterWheel, 0, 1)==1) - { - OnMapZoomChanged(_map.Zoom); - - Refresh(); - } - } - - private Coordinate _dragStartCenter; - private System.Drawing.Drawing2D.Matrix _dragTransform; - private double _orgScale; - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnMouseDown(MouseEventArgs e) - { - _logger.DebugFormat("MouseDown {0} ({1}, {2})", Name, e.Location, e.Button); - - // call base function - base.OnMouseDown(e); - - // Do we have a map? If not bail out - if (_map == null) - return; - - // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y), true); - - // Raise event - if (MouseDown != null) - MouseDown(p, e); - - // Do we have a custom tool - if (UseCurrentTool) - { - if (_currentTool.DoMouseDown(p, e)) - return; - } - - - // Do we have a predefined tool - if (_activeTool == Tools.None) - return; - - if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) //dragging - { - _dragStartPoint = e.Location; - _dragEndPoint = e.Location; - _dragStartCenter = _map.Center; - - _dragTransform = new System.Drawing.Drawing2D.Matrix(); - _dragTransform.Translate(-e.X, -e.Y); - _dragTransform.Scale(1f, -1f, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis - if (_map.MapTransformRotation == 0) - _dragTransform.Scale((float)_map.PixelWidth, (float)_map.PixelHeight, System.Drawing.Drawing2D.MatrixOrder.Append); - else - { - _dragTransform.Rotate(_map.MapTransformRotation, System.Drawing.Drawing2D.MatrixOrder.Append); - // must derive scale for rotated maps, as "Zoom" is based upon non-rotated width - var env = _map.Envelope; - _dragTransform.Scale((float)(env.Width / Width), (float)(env.Width / Width / _map.PixelAspectRatio), System.Drawing.Drawing2D.MatrixOrder.Append); - } - _dragTransform.Translate((float)p.X, (float)p.Y, System.Drawing.Drawing2D.MatrixOrder.Append); - - _orgScale = _map.Zoom; - } - } - - //private bool ActionCheck(object sender, EventArgs e, Action baseFunction, out Coordinate point, - // Action mapDelegate) - //{ - // // call base function - // if (baseFunction != null) - // baseFunction(sender, e); - - // // Do we have a map? - // point = null; - // if (_map == null) - // return false; - - // // Do we have a map delegate - // if (e is MouseEventArgs && mapDelegate != null) - // { - // point = _map.ImageToWorld(((MouseEventArgs) e).Location); - // mapDelegate(point, e); - // } - - // // Do we have an active predefined tool - // return _activeTool != Tools.None; - //} - - /// - /// Private method to check if we need to reenable the event. - /// - /// The current position of the cursor - private void CheckEnableHover(Point position) - { - var delta = new Size(position.X - _lastHoverPostiton.X, - position.Y - _lastHoverPostiton.Y); - - if (Math.Abs(delta.Width) > SystemInformation.MouseHoverSize.Width || - Math.Abs(delta.Height) > SystemInformation.MouseHoverSize.Height) - { - ResetMouseEventArgs(); - } - - } - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnMouseMove(MouseEventArgs e) - { - // call base function - base.OnMouseMove(e); - - // Do we have a map? If not bail out - if (_map == null) - { - CheckEnableHover(e.Location); - return; - } - - // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y), true); - - // Raise event - if (MouseMove != null) - MouseMove(p, e); - - // Do we have a custom tool - if (UseCurrentTool) - { - if (_currentTool.DoMouseMove(p, e)) - { - CheckEnableHover(e.Location); - return; - } - } - - - // If no tool is selected, bail out - if (ActiveTool == Tools.None) - { - CheckEnableHover(e.Location); - return; - } - - bool isStartDrag = //_image != null && e.Location != _dragStartPoint && !_dragging && - _miRenderer.ImageValue != null && e.Location != _dragStartPoint && !_dragging && - (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) && - //Left of middle button can start drag - !(_setActiveToolNoneDuringRedraw && - (_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPoint || - _activeTool == Tools.DrawPolygon)); //It should not be any of these tools - - if (isStartDrag) - { - _dragging = true; - } - - if (_dragging) - { - if (MouseDrag != null) - MouseDrag(p, e); - - //Pan can be if we have ActiveTool Pan and not doing a ShiftButtonZoom-Operation - bool isPanOperation = _activeTool == Tools.Pan && - !(_shiftButtonDragRectangleZoom && - (ModifierKeys & Keys.Shift) != Keys.None); - - //Pan can also be if we are in a drawline/drawpoint/drawpoly operation and pressed left mousebutton while dragging.. - //If we not are setting tool non while redrawing.. - if ((_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon) - && e.Button == MouseButtons.Left && !_setActiveToolNoneDuringRedraw) - { - isPanOperation = true; - } - - - //Zoom in or Zoom Out - bool isZoomOperation = _activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut; - - //Tool ZoomWindow or ShiftButtonDragRectangle - bool isZoomWindowOperation = _activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox || - //_activeTool == Tools.QueryPoint || - /*_activeTool == Tools.QueryPolygon || */ - (_shiftButtonDragRectangleZoom && - (Control.ModifierKeys & Keys.Shift) != Keys.None); - - if (isPanOperation) - { - _dragEndPoint = ClipPoint(e.Location); - if (_dragStartCenter != null) - { - var oldCenter = _map.Center; - - var pts = new[] { new System.Drawing.PointF(_dragStartPoint.X, _dragStartPoint.Y), - new System.Drawing.PointF(_dragEndPoint.X, _dragEndPoint.Y) //, - //new System.Drawing.PointF(Width/2f, Height/2f) - }; - - _dragTransform.TransformPoints(pts); - - var dX = (pts[1].X - pts[0].X); - var dY = (pts[1].Y - pts[0].Y); - - _map.Center = new Coordinate(_dragStartCenter.X - dX, _dragStartCenter.Y - dY); - - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) - { - OnMapCenterChanged(_map.Center); - - Invalidate(ClientRectangle); - } - } - } - else if (isZoomOperation) - { - _dragEndPoint = ClipPoint(e.Location); - if (_dragEndPoint.Y - _dragStartPoint.Y < 0) //Zoom out - _scaling = (float) Math.Pow(1/(float) (_dragStartPoint.Y - _dragEndPoint.Y), 0.5); - else //Zoom in - _scaling = 1 + (_dragEndPoint.Y - _dragStartPoint.Y)*0.1f; - - _map.Zoom = _orgScale/_scaling; - if (MapZooming != null) - MapZooming(_map.Zoom); - - Invalidate(ClientRectangle); - } - else if (isZoomWindowOperation) - { - _dragEndPoint = ClipPoint(e.Location); - _rectangle = GenerateRectangle(_dragStartPoint, _dragEndPoint); - Invalidate(new Region(ClientRectangle)); - } - } - else - { - if (_activeTool == Tools.DrawPolygon || _activeTool == Tools.DrawLine) - { - _dragEndPoint = new Point(0, 0); - if (_pointArray != null) - { - _pointArray[_pointArray.Count - 1] = Map.ImageToWorld(ClipPoint(e.Location)); - _rectangle = GenerateRectangle(_dragStartPoint, ClipPoint(e.Location)); - Invalidate(new Region(ClientRectangle)); - } - } - } - - CheckEnableHover(e.Location); - } - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnKeyDown(KeyEventArgs e) - { -#if EnableMetafileClipboardSupport - if (e.Control && e.KeyCode == Keys.C) - { - Clipboard.Clear(); - ClipboardMetafileHelper.PutEnhMetafileOnClipboard(Handle, _map.GetMapAsMetafile()); - e.Handled = true; - } -#endif - - if (UseCurrentTool) - { - _currentTool.DoKeyDown(_map.ImageToWorld(MousePosition), e); - } - base.OnKeyDown(e); - } - - private bool UseCurrentTool { get { return _currentTool != null && _currentTool.Enabled; }} - - internal bool Dragging - { - get => _dragging; - } - - public object MapLocker => _mapLocker; - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected virtual void OnMapChanging(CancelEventArgs e) - { - if (MapChanging != null) MapChanging(this, e); - if (e.Cancel) - return; - - //if (_map != null) - //{ - // _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; - // _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; - // _map.RefreshNeeded -= HandleRefreshNeeded; - //} - } - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected virtual void OnMapChanged(EventArgs e) - { - if (_map != null) - { - //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; - //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; - //_map.RefreshNeeded += HandleRefreshNeeded; - Refresh(); - } - - // Assign the map to the custom tool, too. - if (_currentTool != null) _currentTool.Map = _map; - - var handler = MapChanged; - if (handler != null) handler(this, e); - } - - internal protected virtual void OnMapRefreshed(EventArgs e) - { - MapRefreshed?.Invoke(this, e); - } - - /// - /// Invokes the event. - /// - /// - protected virtual void OnMapZoomChanged(double zoom) - { - var handler = MapZoomChanged; - if (handler != null) - handler(zoom); - } - - /// - /// Invokes the event. - /// - /// - protected virtual void OnMapCenterChanged(Coordinate center) - { - var handler = MapCenterChanged; - if (handler != null) - handler(center); - } - - //void HandleRefreshNeeded(object sender, EventArgs e) - //{ - // UpdateImage(true); - //} - - /* - private void RegenerateZoomingImage() - { - var c = Cursor; - Cursor = Cursors.WaitCursor; - _map.Zoom /= _scaling; - lock (_mapLocker) - { - _image = _map.GetMap(); - } - _scaling = 1; - _dragImage = GenerateDragImage(PreviewModes.Best); - _dragStartPoint = _dragEndPoint; - Cursor = c; - } - - private Bitmap GenerateDragImage(PreviewModes mode) - { - if (mode == PreviewModes.Best) - { - Cursor c = Cursor; - Cursor = Cursors.WaitCursor; - - Coordinate realCenter = _map.Center; - Bitmap bmp = new Bitmap(_map.Size.Width*3, _map.Size.Height*3); - Graphics g = Graphics.FromImage(bmp); - - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - if (i == 0 && j == 0) - { - var clone = _image.Clone() as Image; - if (clone != null) - g.DrawImageUnscaled(clone, _map.Size.Width, _map.Size.Height); - } - else - g.DrawImageUnscaled(GeneratePartialBitmap(realCenter, (XPosition) i, (YPosition) j), - (i + 1)*_map.Size.Width, (j + 1)*_map.Size.Height); - } - } - g.Dispose(); - _map.Center = realCenter; - - Cursor = c; - - return bmp; - } - if (_image.PixelFormat != PixelFormat.Undefined) - return _image.Clone() as Bitmap; - return null; - } - - private Bitmap GeneratePartialBitmap(Coordinate center, XPosition xPos, YPosition yPos) - { - double x = center.X, y = center.Y; - - switch (xPos) - { - case XPosition.Right: - x += _map.Envelope.Width; - break; - case XPosition.Left: - x -= _map.Envelope.Width; - break; - } - - switch (yPos) - { - case YPosition.Top: - y += _map.Envelope.Height; - break; - case YPosition.Bottom: - y -= _map.Envelope.Height; - break; - } - - _map.Center = new Coordinate(x, y); - return _map.GetMap() as Bitmap; - } - */ - - private Point ClipPoint(Point p) - { - var x = p.X < 0 ? 0 : (p.X > ClientSize.Width ? ClientSize.Width : p.X); - var y = p.Y < 0 ? 0 : (p.Y > ClientSize.Height ? ClientSize.Height : p.Y); - return new Point(x, y); - } - - private static Rectangle GenerateRectangle(Point p1, Point p2) - { - var x = Math.Min(p1.X, p2.X); - var y = Math.Min(p1.Y, p2.Y); - var width = Math.Abs(p2.X - p1.X); - var height = Math.Abs(p2.Y - p1.Y); - - return new Rectangle(x, y, width, height); - } - - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnPaint(PaintEventArgs pe) - { - try - { - if (_logger.IsDebugEnabled) - _logger.Debug($"OnPaint ({pe.ClipRectangle}), ActiveTool: {Enum.GetName(typeof(MapBox.Tools), _activeTool)}"); - - //Console.WriteLine($"OnPaint ({pe.ClipRectangle.ToString()})"); - - if (_dragging) - { - if (_activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox || - (_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) - { - var image = (Bitmap) _miRenderer.ImageValue; - - //Reset image to normal view - using (var patch = image.Clone(pe.ClipRectangle, PixelFormat.DontCare)) - pe.Graphics.DrawImageUnscaled(patch, pe.ClipRectangle); - - //Draw selection rectangle - if (_rectangle.Width > 0 && _rectangle.Height > 0) - { - pe.Graphics.FillRectangle(_rectangleBrush, _rectangle); - var border = new Rectangle(_rectangle.X + (int) _rectanglePen.Width/2, - _rectangle.Y + (int) _rectanglePen.Width/2, - _rectangle.Width - (int) _rectanglePen.Width, - _rectangle.Height - (int) _rectanglePen.Width); - pe.Graphics.DrawRectangle(_rectanglePen, border); - } - } - else if (_activeTool == Tools.Pan || _activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || - _activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon) - { - var image = _miRenderer.ImageValue; - var imageEnvelope = _miRenderer.ImageEnvelope; - if (_map.Envelope.Equals(imageEnvelope)) - pe.Graphics.DrawImageUnscaled(image, 0, 0); - else if (_activeTool == Tools.Pan) - { - var dX = (_dragEndPoint.X - _dragStartPoint.X); - var dY = (_dragEndPoint.Y - _dragStartPoint.Y); - pe.Graphics.DrawImageUnscaled(image, dX, dY); - } - else - { - var ul = _map.WorldToImage(imageEnvelope.TopLeft()); - var lr = _map.WorldToImage(imageEnvelope.BottomRight()); - pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); - } - } - // - // This is never going to happen with the above condition in place - // - /* - else if (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut) - { - var rect = new RectangleF(0, 0, _map.Size.Width, _map.Size.Height); - - if (_map.Zoom/_scaling < _map.MinimumZoom) - _scaling = (float) Math.Round(_map.Zoom/_map.MinimumZoom, 4); - - if (_previewMode == PreviewModes.Best) - _scaling *= 3; - - rect.Width *= _scaling; - rect.Height *= _scaling; - - rect.Offset(_map.Size.Width/2f - rect.Width/2, _map.Size.Height/2f - rect.Height/2); - - - pe.Graphics.DrawImage(_dragImage, rect); - }*/ - } - else - { - var image = _miRenderer.ImageValue; - if (image != null && image.PixelFormat != PixelFormat.Undefined) - { - - var imageEnvelope = _miRenderer.ImageEnvelope; - if (_map.Envelope.Equals(imageEnvelope)) - pe.Graphics.DrawImageUnscaled(image, 0, 0); - else { - var ul = _map.WorldToImage(imageEnvelope.TopLeft()); - var lr = _map.WorldToImage(imageEnvelope.BottomRight()); - pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); - } - } - } - - //Draws current line or polygon (Draw Line or Draw Polygon tool) - if (_pointArray != null) - { - if (_pointArray.Count == 1) - { - var p1 = Map.WorldToImage(_pointArray[0]); - var p2 = Map.WorldToImage(_pointArray[1]); - pe.Graphics.DrawLine(new Pen(Color.Gray, 2F), p1, p2); - } - else - { - var pts = new PointF[_pointArray.Count]; - for (int i = 0; i < pts.Length; i++) - pts[i] = Map.WorldToImage(_pointArray[i]); - - if (_activeTool == Tools.DrawPolygon) - { - Color c = Color.FromArgb(127, Color.Gray); - pe.Graphics.FillPolygon(new SolidBrush(c), pts); - pe.Graphics.DrawPolygon(new Pen(Color.Gray, 2F), pts); - } - else - { - if (pts.Length > 0) - pe.Graphics.DrawLines(new Pen(Color.Gray, 2F), pts); - } - } - } - - // Invoke the base implementation to get the event fired - base.OnPaint(pe); - - // Do we have a custom tool - if (UseCurrentTool) { _currentTool.DoPaint(pe); } - - /*Draw Floating Map-Decorations*/ - if (_map != null && _map.Decorations != null) - { - foreach (Rendering.Decoration.IMapDecoration md in _map.Decorations) - { - md.Render(pe.Graphics, _map); - } - } - } - catch (Exception ee) - { - _logger.Error(ee); - } - } - - /// - /// Invokes the -event. - /// - /// A that contains the event arguments. - protected override void OnMouseUp(MouseEventArgs e) - { - _logger.DebugFormat("MouseUp {0} ({1}, {2})", Name, e.Location, e.Button); - - // call base function - base.OnMouseUp(e); - - // Do we have a map? If not bail out - if (_map == null) - return; - - // Position in world coordinates - var p = _map.ImageToWorld(new Point(e.X, e.Y), true); - - // Raise event - if (MouseUp != null) - MouseUp(p, e); - - // Do we have a custom tool - if (UseCurrentTool) - { - if (_currentTool.DoMouseUp(p, e)) - return; - } - - // If no tool is selected, bail out - if (_activeTool == Tools.None) - return; - - bool needToRefresh = false; - - if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) - { - if (_activeTool == Tools.ZoomOut) - { - double scale = 0.5; - if (_dragging) - { - if (e.Y - _dragStartPoint.Y < 0) //Zoom out - scale = (float) Math.Pow(1/(float) (_dragStartPoint.Y - e.Y), 0.5); - else //Zoom in - scale = 1 + (e.Y - _dragStartPoint.Y)*0.1; - } - else - { - var oldCenter = _map.Center; - - _map.Center = _map.ImageToWorld(new Point(e.X, e.Y)); - - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) - { - needToRefresh = true; - OnMapCenterChanged(_map.Center); - } - } - - var oldZoom = _map.Zoom; - - _map.Zoom /= scale; - - if (Math.Abs(oldZoom - _map.Zoom) > PrecisionTolerance) - { - needToRefresh = true; - OnMapZoomChanged(_map.Zoom); - } - - } - else if (_activeTool == Tools.ZoomIn) - { - double scale = 2; - if (_dragging) - { - if (e.Y - _dragStartPoint.Y < 0) //Zoom out - scale = (float) Math.Pow(1/(float) (_dragStartPoint.Y - e.Y), 0.5); - else //Zoom in - scale = 1 + (e.Y - _dragStartPoint.Y)*0.1; - } - else - { - var oldCenter = _map.Center; - _map.Center = _map.ImageToWorld(new Point(e.X, e.Y)); - - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) - { - needToRefresh = true; - OnMapCenterChanged(_map.Center); - } - - } - - var oldZoom = _map.Zoom; - _map.Zoom =oldZoom * 1/scale; - - if (Math.Abs(_map.Zoom - oldZoom) > PrecisionTolerance) - { - needToRefresh = true; - OnMapZoomChanged(_map.Zoom); - } - - } - else if ((_activeTool == Tools.Pan && - !(_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) || - (e.Button == MouseButtons.Left && _dragging && - (_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon))) - { - if (_dragging) - { - if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) - { - needToRefresh = true; - OnMapCenterChanged(_map.Center); - } - - } - else - { - if (_panOnClick) - { - var oldValue = _map.Center; - _map.Center = p; - - if (!_map.Center.Equals2D(oldValue, PrecisionTolerance)) - { - needToRefresh = true; - OnMapCenterChanged(_map.Center); - } - } - } - } - else if (_activeTool == Tools.QueryBox || _activeTool == Tools.QueryPoint - /*|| _activeTool == Tools.QueryPolygon*/) - { - //OnMouseUpQuery(e); - var mqs = MapQueryStarted; - if (mqs != null) - mqs(this, new EventArgs()); - - var layersToQuery = GetLayersToQuery(); - - if (layersToQuery.Count > 0) - { - var foundData = false; - foreach (var layer in layersToQuery) - { - Envelope bounding; - var isPoint = false; - if (_dragging) - { - Coordinate lowerLeft, upperRight; - GetBounds(_map.ImageToWorld(_dragStartPoint), _map.ImageToWorld(_dragEndPoint), - out lowerLeft, out upperRight); - - bounding = new Envelope(lowerLeft, upperRight); - } - else - { - bounding = new Envelope(_map.ImageToWorld(new Point(e.X, e.Y))); - bounding = bounding.Grow(_map.PixelSize*_queryGrowFactor); - isPoint = true; - } - - var ds = new Data.FeatureDataSet(); - if (_activeTool == Tools.QueryBox) - { - layer.ExecuteIntersectionQuery(bounding, ds); - } - else - { - IGeometry geom; - if (isPoint && QueryGrowFactor == 0) - geom = _map.Factory.CreatePoint(_map.ImageToWorld(new Point(e.X, e.Y))); - else - geom = _map.Factory.ToGeometry(bounding); - layer.ExecuteIntersectionQuery(geom, ds); - } - - if (MapQueried != null) - { - if (ds.Tables.Count > 0) - { - //Fire the event for all the resulting tables - foreach (var dt in ds.Tables) - { - if (dt.Rows.Count > 0) - { - MapQueried(dt); - foundData = true; - if (_mapQueryMode == MapQueryType.TopMostLayer) - break; - } - } - } - else - { - if (_mapQueryMode == MapQueryType.LayerByIndex) - MapQueried( - new Data.FeatureDataTable(new System.Data.DataTable(layer.LayerName))); - } - } - - //If we found data and querymode is TopMostLayer we should abort now.. - if (foundData && _mapQueryMode == MapQueryType.TopMostLayer) - { - break; - } - } - } - var mqd = MapQueryDone; - if (mqd != null) - mqd(this, new EventArgs()); - } - - else if (_activeTool == Tools.ZoomWindow || - (_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) - { - if (_rectangle.Width > 0 && _rectangle.Height > 0) - { - var zoomWindowStartPoint = _dragStartPoint; - var zoomWindowEndPoint = new PointF(e.X, e.Y); - - Coordinate lowerLeft; - Coordinate upperRight; - GetBounds( - _map.ImageToWorld(zoomWindowStartPoint), - _map.ImageToWorld(zoomWindowEndPoint), - out lowerLeft, - out upperRight); - - _dragEndPoint.X = 0; - _dragEndPoint.Y = 0; - - var oldCenter = _map.Center; - var oldZoom = _map.Zoom; - - _map.ZoomToBox(new Envelope(lowerLeft, upperRight)); - - if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance) || - Math.Abs(oldZoom - _map.Zoom) > PrecisionTolerance) - { - needToRefresh = true; - OnMapZoomChanged(_map.Zoom); - } - else - { - // we must to cancel the selected area anyway - Invalidate(); - } - } - } - else if (_activeTool == Tools.DrawPoint) - { - if (GeometryDefined != null) - { - GeometryDefined(_map.Factory.CreatePoint(Map.ImageToWorld(new PointF(e.X, e.Y)))); - } - } - else if (_activeTool == Tools.DrawPolygon || _activeTool == Tools.DrawLine) - { - //pointArray = null; - if (_pointArray == null) - { - _pointArray = new List(2); - _pointArray.Add(Map.ImageToWorld(e.Location)); - _pointArray.Add(Map.ImageToWorld(e.Location)); - } - else - { - //var temp = new Coordinate[_pointArray.Count + 2]; - _pointArray.Add(Map.ImageToWorld(e.Location)); - } - } - } - - - if (_dragging) - { - _dragging = false; - if (_activeTool == Tools.QueryBox) - Invalidate(_rectangle); - if (_activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox - /*|| _activeTool == Tools.QueryPolygon*/) - _rectangle = Rectangle.Empty; - - if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) - Refresh(); - - if (_dragTransform != null) - _dragTransform.Dispose(); - } - else if (needToRefresh && (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || _activeTool == Tools.Pan)) - { - Refresh(); - } - } - - private List GetLayersToQuery() - { - var layersToQuery = new List(); - switch (_mapQueryMode) - { - case MapQueryType.LayerByIndex: - if (_map.Layers.Count > _queryLayerIndex && _queryLayerIndex > -1) - { - var layer = _map.Layers[_queryLayerIndex] as ICanQueryLayer; - if (layer != null) - { - layersToQuery.Add(layer); - } - } - break; - case MapQueryType.TopMostLayer: - case MapQueryType.VisibleLayers: - foreach (var layer in _map.Layers) - { - var cqLayer = layer as ICanQueryLayer; - double visibleLevel = layer.VisibilityUnits == Styles.VisibilityUnits.ZoomLevel ? _map.Zoom : _map.MapScale; - if (cqLayer != null && layer.Enabled && layer.MinVisible < visibleLevel && - layer.MaxVisible >= visibleLevel && cqLayer.IsQueryEnabled) - layersToQuery.Add(cqLayer); - } - if (_mapQueryMode == MapQueryType.TopMostLayer) - layersToQuery.Reverse(); - break; - default: - foreach (var layer in _map.Layers) - { - var cqLayer = layer as ICanQueryLayer; - if (cqLayer != null && cqLayer.IsQueryEnabled) - layersToQuery.Add(cqLayer); - } - break; - } - - return layersToQuery; - } - - protected override void OnMouseDoubleClick(MouseEventArgs e) - { - // call base function - base.OnMouseDoubleClick(e); - - if (_map == null) - return; - - // Do we have an active tool? - if (_activeTool == Tools.None) - return; - - // Do we have a custom tool - if (UseCurrentTool) - { - if (_currentTool.DoMouseDoubleClick(_map.ImageToWorld(e.Location), e)) - return; - } - - - if (_activeTool == Tools.DrawPolygon) - { - if (GeometryDefined != null) - { - var cl = new NetTopologySuite.Geometries.CoordinateList(_pointArray, false); - cl.CloseRing(); - GeometryDefined(Map.Factory.CreatePolygon(Map.Factory.CreateLinearRing(NetTopologySuite.Geometries.CoordinateArrays.AtLeastNCoordinatesOrNothing(4, cl.ToCoordinateArray())), null)); - } - ActiveTool = Tools.None; - } - - else if (_activeTool == Tools.DrawLine) - { - if (GeometryDefined != null) - { - var cl = new NetTopologySuite.Geometries.CoordinateList(_pointArray, false); - GeometryDefined(Map.Factory.CreateLineString(NetTopologySuite.Geometries.CoordinateArrays.AtLeastNCoordinatesOrNothing(2, cl.ToCoordinateArray()))); - } - ActiveTool = Tools.None; - } - } - - - private static void GetBounds(Coordinate p1, Coordinate p2, - out Coordinate lowerLeft, out Coordinate upperRight) - { - lowerLeft = new Coordinate(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y)); - upperRight = new Coordinate(Math.Max(p1.X, p2.X), Math.Max(p1.Y, p2.Y)); - - if (_logger.IsDebugEnabled) - { - _logger.Debug("p1: " + p1); - _logger.Debug("p2: " + p2); - _logger.Debug("lowerLeft: " + lowerLeft); - _logger.Debug("upperRight: " + upperRight); - } - } - - /// - /// MouseWheelGrabber is a MessageFilter that enables mousewheelcapture on mapcontrol even if the control does - /// not have focus as long as the mouse is positioned over the control - /// - private class MouseWheelGrabber : IMessageFilter - { - //[DllImport("user32.dll")] - //private static extern IntPtr WindowFromPoint(Point lpPoint); - - //[DllImport("user32.dll")] - //private static extern bool GetCursorPos(out Point lpPoint); - - //private static IntPtr GetWindowUnderCursor() - //{ - // Point ptCursor; - - // if (!(GetCursorPos(out ptCursor))) - // return IntPtr.Zero; - - // return WindowFromPoint(ptCursor); - //} - - private bool _mouseIn = false; - private readonly MapBox _redirectHandle; - - public MouseWheelGrabber(MapBox redirectHandle) - { - _redirectHandle = redirectHandle; - _redirectHandle.MouseEnter += HandleMouseEnter; - _redirectHandle.MouseLeave += HandleMouseLeave; - } - - private void HandleMouseLeave(object sender, EventArgs e) - { - _mouseIn = false; - } - - private void HandleMouseEnter(object sender, EventArgs e) - { - _mouseIn = true; - } - - public bool PreFilterMessage(ref Message m) - { - if (m.Msg == 0x020A) - { - var delta = ((int) (m.WParam.ToInt64() & 0xFFFF0000) >> 16); - var pt = _redirectHandle.PointToClient(new Point(m.LParam.ToInt32())); - if (_redirectHandle.ClientRectangle.Contains(pt)) - { - if (_mouseIn) - { - _redirectHandle.OnMouseWheel( - new MouseEventArgs(MouseButtons.Middle, 0, pt.X, pt.Y, delta)); - return true; - } - //var hWnd = GetWindowUnderCursor(); - //if (hWnd == _redirectHandle.Handle) - //{ - // _redirectHandle.OnMouseWheel( - // new MouseEventArgs(MouseButtons.Middle, 0, pt.X, pt.Y, delta)); - // return true; - //} - } - - } - - return false; - } - - } - - internal void ClearDrag() - { - _dragEndPoint = new Point(0, 0); - _dragging = false; - } - } - - - -#if EnableMetafileClipboardSupport - public class ClipboardMetafileHelper - { - [DllImport("user32.dll")] - static extern bool OpenClipboard(IntPtr hWndNewOwner); - - [DllImport("user32.dll")] - static extern bool EmptyClipboard(); - - [DllImport("user32.dll")] - static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem); - - [DllImport("user32.dll")] - static extern bool CloseClipboard(); - - [DllImport("gdi32.dll")] - static extern IntPtr CopyEnhMetaFile(IntPtr hemfSrc, IntPtr hNull); - - [DllImport("gdi32.dll")] - static extern bool DeleteEnhMetaFile(IntPtr hemf); - - /// - /// Puts the metafile to the clipboard - /// - /// The handle - /// The metafie - /// Metafile mf is set to a state that is not valid inside this function. - /// if operation was successfull - static public bool PutEnhMetafileOnClipboard(IntPtr hWnd, Metafile mf) - { - bool bResult = false; - IntPtr hEmf = mf.GetHenhmetafile(); - - if (!hEmf.Equals(new IntPtr(0))) - { - IntPtr hEmf2 = CopyEnhMetaFile(hEmf, new IntPtr(0)); - if (!hEmf2.Equals(new IntPtr(0))) - { - if (OpenClipboard(hWnd)) - { - if (EmptyClipboard()) - { - IntPtr hRes = SetClipboardData(14 /*CF_ENHMETAFILE*/, hEmf2); - bResult = hRes.Equals(hEmf2); - CloseClipboard(); - } - } - } - DeleteEnhMetaFile(hEmf); - } - return bResult; - } - } -#endif -} +// Copyright 2008-, SharpMapTeam +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#define EnableMetafileClipboardSupport +/* + * Note: + * + * If you want to use MapBox control along with MapImage controls + * you have to define the compile time constant 'UseMapBox' in the + * properties dialog of this project. As a result you will have the + * MapImage control and the MapBox control included in your SharpMap.UI + * assembly. + * + * If you want to use MapBox control as a replacement of MapImage + * control you have to define the compile time constant 'UseMapBoxAsMapImage'. + * in the * properties dialog of this project. As a result you will have a + * MapImage control in your SharpMap.UI assembly which is actually this + * MapBox control. + * + * If you don't define any of the two compile time constants this control + * is omitted. + * + * FObermaier + */ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using GeoAPI.Geometries; +using SharpMap.Forms.Tools; +using SharpMap.Layers; +using System.Drawing.Imaging; +using IGeometry = GeoAPI.Geometries.IGeometry; +using System.Threading; +using Common.Logging; +using System.Collections.Generic; +using System.Drawing.Drawing2D; +using SharpMap.Forms.ImageGenerator; + +namespace SharpMap.Forms +{ + /// + /// MapBox Class - MapBox control for Windows forms + /// + /// + /// The ExtendedMapImage control adds more than basic functionality to a Windows Form, such as dynamic pan, widow zoom and data query. + /// + [DesignTimeVisible(true)] +// ReSharper disable once PartialTypeWithSinglePart + public partial class MapBox : Control + { + protected override void OnInvalidated(InvalidateEventArgs e) + { + base.OnInvalidated(e); + _logger.Debug(t => t("Rectangle {0} invalidate", e.InvalidRect)); + } + + + private static readonly ILog _logger = LogManager.GetLogger(typeof (MapBox)); + private const double PrecisionTolerance = 0.00000001; + + static MapBox() { Map.Configure(); } + + #region PreviewModes enumerator + + // ReSharper disable UnusedMember.Local + /// + /// Preview modes + /// + public enum PreviewModes + { + /// + /// Best preview mode + /// + Best, + + /// + /// Fast preview mode + /// + Fast + } + + #endregion + + #region Position enumerators + + /// + /// Horizontal alignment enumeration + /// + private enum XPosition + { + Center = 0, + Right = 1, + Left = -1 + } + + /// + /// Vertical alignment enumeration + /// + private enum YPosition + { + Center = 0, + Top = -1, + Bottom = 1 + } + + // ReSharper restore UnusedMember.Local + + #endregion + + #region Tools enumerator + + /// + /// Map tools enumeration + /// + public enum Tools + { + /// + /// Pan + /// + Pan, + + /// + /// Zoom in + /// + ZoomIn, + + /// + /// Zoom out + /// + ZoomOut, + + /// + /// Query bounding boxes for intersection + /// + QueryBox, + + /// + /// Query tool + /// + [Obsolete ("Use QueryBox")] + Query = QueryBox, + + /// + /// Attempt true intersection query on geometry + /// + QueryPoint, + + /// + /// Attempt true intersection query on geometry + /// + [Obsolete ("Use QueryPoint")] + QueryGeometry = QueryPoint, + + ///// + ///// Attempt true intersection query on polygonal geometry + ///// + //QueryPolygon, + + /// + /// Zoom window tool + /// + ZoomWindow, + + /// + /// Define Point on Map + /// + DrawPoint, + + /// + /// Define Line on Map + /// + DrawLine, + + /// + /// Define Polygon on Map + /// + DrawPolygon, + + /// + /// No active tool + /// + None, + + /// + /// Custom tool, implementing + /// + Custom + } + + /// + /// Enumeration of map query types + /// + public enum MapQueryType + { + /// + /// Layer set in QueryLayerIndex is the only layers Queried (Default) + /// + LayerByIndex, + + /// + /// All layers are queried + /// + AllLayers, + + /// + /// All visible layers are queried + /// + VisibleLayers, + + /// + /// Visible layers are queried from Top and down until a layer with an intersecting feature is found + /// + TopMostLayer + }; + + + #endregion + + #region Events + + /// + /// MouseEventtype fired from the MapImage control + /// + /// + /// + public delegate void MouseEventHandler(Coordinate worldPos, MouseEventArgs imagePos); + + /// + /// Fires when mouse moves over the map + /// + public new event MouseEventHandler MouseMove; + + /// + /// Fires when map received a mouseclick + /// + public new event MouseEventHandler MouseDown; + + /// + /// Fires when mouse is released + /// + public new event MouseEventHandler MouseUp; + + /// + /// Fired when mouse is dragging + /// + public event MouseEventHandler MouseDrag; + + /// + /// Fired when the map has been refreshed + /// + public event EventHandler MapRefreshed; + + /// + /// Fired when the map is about to change + /// + public event CancelEventHandler MapChanging; + + /// + /// Fired when the map has been changed + /// + public event EventHandler MapChanged; + + /// + /// Eventtype fired when the zoom was or are being changed + /// + /// + public delegate void MapZoomHandler(double zoom); + + /// + /// Fired when the zoom value has changed + /// + public event MapZoomHandler MapZoomChanged; + + /// + /// Fired when the map is being zoomed + /// + public event MapZoomHandler MapZooming; + + /// + /// Eventtype fired when the map is queried + /// + /// + public delegate void MapQueryHandler(Data.FeatureDataTable data); + + /// + /// Fired when the map is queried + /// + /// Will be fired one time for each layer selected for query depending on QueryLayerIndex and QuerySettings + /// + public event MapQueryHandler MapQueried; + + /// + /// Fired when Map is Queried before the first MapQueried event is fired for that query + /// + public event EventHandler MapQueryStarted; + + /// + /// Fired when Map is Queried after the last MapQueried event is fired for that query + /// + public event EventHandler MapQueryDone; + + + /// + /// Eventtype fired when the center has changed + /// + /// + public delegate void MapCenterChangedHandler(Coordinate center); + + /// + /// Fired when the center of the map has changed + /// + public event MapCenterChangedHandler MapCenterChanged; + + /// + /// Eventtype fired befor the active map tool change + /// + /// pre-tool + /// new tool + /// a cancel indicator + public delegate void ActiveToolChangingHandler(Tools toolPre, Tools toolNew, CancelEventArgs cea); + + /// + /// Fired befor the active map tool change + /// + public event ActiveToolChangingHandler ActiveToolChanging; + + /// + /// Eventtype fired when the map tool is changed + /// + /// + public delegate void ActiveToolChangedHandler(Tools tool); + + /// + /// Fired when the active map tool has changed + /// + public event ActiveToolChangedHandler ActiveToolChanged; + + /// + /// Eventtype fired when a new geometry has been defined + /// + /// New Geometry + public delegate void GeometryDefinedHandler(IGeometry geometry); + + /// + /// Fired when a new polygon has been defined + /// + public event GeometryDefinedHandler GeometryDefined; + + #endregion + + private readonly IMapBoxImageGenerator _miRenderer; + + private static int m_defaultColorIndex; + + private static readonly Color[] _defaultColors ={ + Color.DarkRed, + Color.DarkGreen, + Color.DarkBlue, + Color.Orange, + Color.Cyan, + Color.Black, + Color.Purple, + Color.Yellow, + Color.LightBlue, + Color.Fuchsia + }; + + /* + private const float MinDragScalingBeforeRegen = 0.3333f; + private const float MaxDragScalingBeforeRegen = 3f; + */ + private readonly ProgressBar _progressBar; + +#if DEBUG + private readonly Stopwatch _watch = new Stopwatch(); +#endif + + //private bool m_IsCtrlPressed; + private IMapTool _currentTool; + private double _wheelZoomMagnitude = -2; + private Tools _activeTool; + private double _fineZoomFactor = 10; + private Map _map; + private int _queryLayerIndex; + private Point _dragStartPoint; + private Point _dragEndPoint; + //private Bitmap _dragImage; + private Rectangle _rectangle = Rectangle.Empty; + private bool _dragging; + private readonly SolidBrush _rectangleBrush = new SolidBrush(Color.FromArgb(210, 244, 244, 244)); + private readonly Pen _rectanglePen = new Pen(Color.FromArgb(244, 244, 244), 1); + + private float _scaling; + //private Image _image = new Bitmap(1, 1); + //private Image _imageBackground = new Bitmap(1, 1); + //private Image _imageStatic = new Bitmap(1, 1); + //private Image _imageVariable = new Bitmap(1, 1); + //private Envelope _imageEnvelope = new Envelope(0, 1, 0, 1); + //private int _imageGeneration; + + private readonly object _mapLocker = new object(); + + private int _needToRefreshAfterWheel; + private PreviewModes _previewMode; + //private bool _isRefreshing; + private List _pointArray = new List(); + private bool _showProgress; + private bool _zoomToPointer = true; + private bool _setActiveToolNoneDuringRedraw; + private bool _shiftButtonDragRectangleZoom = true; + private bool _focusOnHover; + private bool _panOnClick = true; + private float _queryGrowFactor = 5f; + private MapQueryType _mapQueryMode = MapQueryType.LayerByIndex; + + private readonly IMessageFilter _mousePreviewFilter; + + /// + /// Assigns a random color to a vector layers style + /// + /// + public static void RandomizeLayerColors(VectorLayer layer) + { + layer.Style.EnableOutline = true; + layer.Style.Fill = new SolidBrush(Color.FromArgb(80, _defaultColors[m_defaultColorIndex%_defaultColors.Length])); + layer.Style.Outline = + new Pen( + Color.FromArgb(100, + _defaultColors[ + (m_defaultColorIndex + ((int) (_defaultColors.Length*0.5)))%_defaultColors.Length]), + 1f); + m_defaultColorIndex++; + } + + /// + /// Gets or sets a value on whether to report progress of map generation + /// + [Description("Define if the progress Bar is shown")] + [Category("Appearance")] + public bool ShowProgressUpdate + { + get { return _showProgress; } + + set + { + _showProgress = value; + _progressBar.Visible = _showProgress; + } + } + + /// + /// Gets or sets whether the "go-to-cursor-on-click" feature is enabled or not (even if enabled it works only if the active tool is Pan) + /// + [Description( + "Sets whether the \"go-to-cursor-on-click\" feature is enabled or not (even if enabled it works only if the active tool is Pan)" + )] + [DefaultValue(true)] + [Category("Behavior")] + public bool PanOnClick + { + get { return _panOnClick; } + set + { + ActiveTool = Tools.Pan; + _panOnClick = value; + + } + } + + /// + /// Sets whether the mapcontrol should automatically grab focus when mouse is hovering the control + /// + [Description("Sets whether the mapcontrol should automatically grab focus when mouse is hovering the control")] + [DefaultValue(false)] + [Category("Behavior")] + public bool TakeFocusOnHover + { + get { return _focusOnHover; } + set { _focusOnHover = value; } + } + + /// + /// Sets whether the mouse wheel should zoom to the pointer location + /// + [Description("Sets whether the mouse wheel should zoom to the pointer location")] + [DefaultValue(true)] + [Category("Behavior")] + public bool ZoomToPointer + { + get { return _zoomToPointer; } + set { _zoomToPointer = value; } + } + + /// + /// Sets ActiveTool to None (and changing cursor) while redrawing the map + /// + [Description("Sets ActiveTool to None (and changing cursor) while redrawing the map")] + [DefaultValue(false)] + [Category("Behavior")] + public bool SetToolsNoneWhileRedrawing + { + get { return _setActiveToolNoneDuringRedraw; } + set { _setActiveToolNoneDuringRedraw = value; } + } + + /// + /// Gets or sets the number of pixels by which a bounding box around the query point should be "grown" prior to perform the query + /// + /// Does not apply when querying against boxes. + [Description( + "Gets or sets the number of pixels by which a bounding box around the query point should be \"grown\" prior to perform the query" + )] + [DefaultValue(5)] + [Category("Behavior")] + public float QueryGrowFactor + { + get { return _queryGrowFactor; } + set + { + if (value < 0) value = 0; + //if (value > 10) + _queryGrowFactor = value; + } + } + + + /// + /// Gets or sets the value of the back color for the selection rectangle + /// + [Description("The color of selecting rectangle.")] + [Category("Appearance")] + public Color SelectionBackColor + { + get { return _rectangleBrush.Color; } + set + { + //if (value != m_RectangleBrush.Color) + _rectangleBrush.Color = value; + } + } + + /// + /// Gets or sets the value of the border color for the selection rectangle + /// + [Description("The color of selectiong rectangle frame.")] + [Category("Appearance")] + public Color SelectionForeColor + { + get { return _rectanglePen.Color; } + set + { + //if (value != m_RectanglePen.Color) + _rectanglePen.Color = value; + } + } + + /// + /// Gets the current map image + /// + [Description("The map image currently visualized.")] + [Category("Appearance")] + public Image Image + { + get + { + return _miRenderer.Image; + //GetImagesAsyncEnd(null); + //return _image; + } + } + + /// + /// Gets or sets the amount which a single movement of the mouse wheel zooms by. + /// + [Description( + "The amount which a single movement of the mouse wheel zooms by. (Negative values are similar as OpenLayers/Google, positive are like ArcMap" + )] + [DefaultValue(-2)] + [Category("Behavior")] + public double WheelZoomMagnitude + { + get { return _wheelZoomMagnitude; } + set { _wheelZoomMagnitude = value; } + } + + /// + /// Gets or sets the mode used to create preview image while panning or zooming. + /// + [Description("Mode used to create preview image while panning or zooming.")] + [DefaultValue(PreviewModes.Best)] + [Category("Behavior")] + public PreviewModes PreviewMode + { + get { return _previewMode; } + set + { + if (!_dragging) + _previewMode = value; + } + } + + /// + /// Gets or sets a value indicating the amount which the WheelZoomMagnitude is divided by + /// when the Control key is pressed. A number greater than 1 decreases + /// the zoom, and less than 1 increases it. A negative number reverses it. + /// + [Description("The amount which the WheelZoomMagnitude is divided by " + + "when the Control key is pressed. A number greater than 1 decreases " + + "the zoom, and less than 1 increases it. A negative number reverses it.")] + [DefaultValue(10)] + [Category("Behavior")] + public double FineZoomFactor + { + get { return _fineZoomFactor; } + set { _fineZoomFactor = value; } + } + + /// + /// Gets or sets a value that enables shortcut to rectangle-zoom by holding down shift-button and drag rectangle + /// + [Description("Enables shortcut to rectangle-zoom by holding down shift-button and drag rectangle")] + [DefaultValue(true)] + [Category("Behavior")] + public bool EnableShiftButtonDragRectangleZoom + { + get { return _shiftButtonDragRectangleZoom; } + set { _shiftButtonDragRectangleZoom = value; } + } + + /// + /// Gets or sets the map reference + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Map Map + { + get { return _map; } + set + { + if (value != _map) + { + var cea = new CancelEventArgs(false); + OnMapChanging(cea); + if (cea.Cancel) return; + + _map = value; + + OnMapChanged(EventArgs.Empty); + } + } + } + + /// + /// Gets or sets the index of the active query layer + /// + public int QueryLayerIndex + { + get { return _queryLayerIndex; } + set { _queryLayerIndex = value; } + } + + /// + /// Gets or sets the mapquerying mode + /// + public MapQueryType MapQueryMode + { + get { return _mapQueryMode; } + set { _mapQueryMode = value; } + } + + /// + /// Sets the active map tool + /// + public Tools ActiveTool + { + get { return _activeTool; } + set + { + var cea = new CancelEventArgs(false); + OnActiveToolChanging(ActiveTool, value, cea); + if (cea.Cancel) + { + if (CustomTool != null) + CustomTool.Enabled = true; + return; + } + + _activeTool = value; + + SetCursor(); + + _pointArray = null; + + OnActiveToolChanged(value); + } + } + + /// + /// Event invoker for the + /// + /// pre-tool + /// new tool + /// a cancel indicator + protected virtual void OnActiveToolChanging(Tools toolPre, Tools toolNew, CancelEventArgs cea) + { + if (CustomTool != null) + CustomTool.Enabled = false; + var handler = ActiveToolChanging; + if (handler != null) + handler(toolPre, toolNew, cea); + } + + /// + /// Event invoker for the event + /// + /// The tool + protected virtual void OnActiveToolChanged(Tools activeTool) + { + if (CustomTool != null) + CustomTool.Enabled = true; + var handler = ActiveToolChanged; + if (handler != null) + handler(activeTool); + } + + /// + /// Gets or sets a value indicating the currently active custom tool + /// + public IMapTool CustomTool + { + get { return _currentTool; } + set + { + if (value == _currentTool) + return; + + var raiseActiveToolChanged = ActiveTool == Tools.Custom && value != null; + + _currentTool = value; + ActiveTool = _currentTool != null + ? Tools.Custom + : Tools.None; + + if (_currentTool != null) + _currentTool.Map = _map; + + if (raiseActiveToolChanged) + OnActiveToolChanged(ActiveTool); + } + } + + +#pragma warning disable 1587 +#if DEBUG + /// + /// TimeSpan for refreshing maps + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public TimeSpan LastRefreshTime { get; set; } +#endif + + /// + /// Initializes a new map + /// + public MapBox() +#pragma warning restore 1587 + { + + SetStyle( + ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); + base.DoubleBuffered = true; + + _map = new Map(ClientSize); + //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + //_map.RefreshNeeded += HandleRefreshNeeded; + //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; + + _progressBar = new ProgressBar + { + Style = ProgressBarStyle.Marquee, + Location = new Point(2, 2), + Size = new Size(50, 10) + }; + Controls.Add(_progressBar); + + _miRenderer = new LegacyMapBoxImageGenerator(this, _progressBar); + + _activeTool = Tools.None; + LostFocus += HandleMapBoxLostFocus; + _progressBar.Visible = ShowProgressUpdate; + + _mousePreviewFilter = new MouseWheelGrabber(this); + Application.AddMessageFilter(_mousePreviewFilter); + } + + protected override void OnSizeChanged(EventArgs e) + { + if (Map != null) + { + if (Size != Map.Size) + { + Map.Size = Size; + Refresh(); + } + } + base.OnSizeChanged(e); + } + + /// + /// Dispose method + /// + /// A parameter indicating that this method is called from either a call to (true) + /// or the finalizer (false) + protected override void Dispose(bool disposing) + { + if (_miRenderer.IsDisposed || IsDisposed) + return; + + LostFocus -= HandleMapBoxLostFocus; + if (_mousePreviewFilter != null) + Application.RemoveMessageFilter(_mousePreviewFilter); + + if (_map != null) + { + // special handling to prevent spurious VariableLayers events + _map.VariableLayers.Interval = 0; + //_map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + //_map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + //_map.RefreshNeeded -= HandleRefreshNeeded; + } + + + lock (_mapLocker) + { + _miRenderer.Dispose(); + _map = null; + + //if (_imageStatic != null) + //{ + // _imageStatic.Dispose(); + // _imageStatic = null; + //} + //if (_imageBackground != null) + //{ + // _imageBackground.Dispose(); + // _imageBackground = null; + //} + //if (_imageVariable != null) + //{ + // _imageVariable.Dispose(); + // _imageVariable = null; + //} + //if (_image != null) + //{ + // _image.Dispose(); + // _image = null; + //} + + //if (_dragImage != null) + //{ + // _dragImage.Dispose(); + // _dragImage = null; + //} + + if (_rectanglePen != null) + { + _rectanglePen.Dispose(); + } + if (_rectangleBrush != null) + { + _rectangleBrush.Dispose(); + } + + base.Dispose(disposing); + } + } + + #region event handling + + /// + /// Handles LostFocus event + /// + /// + /// + private void HandleMapBoxLostFocus(object sender, EventArgs e) + { + if (!_dragging) return; + + _dragging = false; + Invalidate(ClientRectangle); + } + + ///// + ///// Handles need to requery of variable layers + ///// + ///// + ///// + //private void HandleVariableLayersRequery(object sender, EventArgs e) + //{ + // if (IsDisposed || _isDisposed) + // return; + + // Image oldRef; + // lock (_mapLocker) + // { + // if (_dragging) return; + // oldRef = _imageVariable; + // _imageVariable = GetMap(_map, _map.VariableLayers, LayerCollectionType.Variable, _map.Envelope); + // } + + // UpdateImage(false); + // if (oldRef != null) + // oldRef.Dispose(); + + // Invalidate(); + // Application.DoEvents(); + //} + +// private void HandleMapNewTileAvaliable(ITileAsyncLayer sender, Envelope box, Bitmap bm, int sourceWidth, +// int sourceHeight, ImageAttributes imageAttributes) +// { +// lock (_backgroundImagesLocker) +// { +// try +// { +// var min = Point.Round(_map.WorldToImage(box.Min())); +// var max = Point.Round(_map.WorldToImage(box.Max())); + +// if (IsDisposed == false && _isDisposed == false) +// { + +// using (var g = Graphics.FromImage(_imageBackground)) +// { + +// g.DrawImage(bm, +// new Rectangle(min.X, max.Y, (max.X - min.X), (min.Y - max.Y)), +// 0, 0, +// sourceWidth, sourceHeight, +// GraphicsUnit.Pixel, +// imageAttributes); + +// } + +// UpdateImage(false); +// } +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// //this can be a GDI+ Hell Exception... +// } + +// } + +// } + + #endregion + +// private Image GetMap(Map map, LayerCollection layers, LayerCollectionType layerCollectionType, +// Envelope extent) +// { +// try +// { +// var width = Width; +// var height = Height; + +// if ((layers == null || layers.Count == 0 || width <= 0 || height <= 0)) +// { +// if (layerCollectionType == LayerCollectionType.Background) +// return new Bitmap(1, 1); +// return null; +// } + +// var retval = new Bitmap(width, height); + +// using (var g = Graphics.FromImage(retval)) +// { +// g.Clear(Color.Transparent); +// map.RenderMap(g, layerCollectionType, false, true); +// } + +// /*if (layerCollectionType == LayerCollectionType.Variable) +// retval.MakeTransparent(_map.BackColor); +// else if (layerCollectionType == LayerCollectionType.Static && map.BackgroundLayer.Count > 0) +// retval.MakeTransparent(_map.BackColor);*/ +// return retval; +// } +// catch (Exception ee) +// { +// _logger.Error("Error while rendering map", ee); + +// if (layerCollectionType == LayerCollectionType.Background) +// return new Bitmap(1, 1); +// return null; +// } +// } + + +// private readonly object _staticImagesLocker = new object(); +// private readonly object _backgroundImagesLocker = new object(); +// private readonly object _paintImageLocker = new object(); +// private readonly object _mapLocker = new object(); + +// private void GetImagesAsync(Envelope extent, int imageGeneration) +// { +// lock (_mapLocker) +// { +// if (_isDisposed) +// return; + +// if (imageGeneration < _imageGeneration) +// { +// /*we're to old*/ +// return; +// } +// var safeMap = _map.Clone(); +// _imageVariable = GetMap(safeMap, _map.VariableLayers, LayerCollectionType.Variable, extent); +// lock (_staticImagesLocker) +// { +// _imageStatic = GetMap(safeMap, _map.Layers, LayerCollectionType.Static, extent); +// } +// lock (_backgroundImagesLocker) +// { +// _imageBackground = GetMap(safeMap, _map.BackgroundLayer, LayerCollectionType.Background, extent); +// } +// } +// } + +// private class GetImageEndResult +// { +// public Tools? Tool { get; set; } +// public Envelope bbox { get; set; } +// public int generation { get; set; } +// } + +// private void GetImagesAsyncEnd(GetImageEndResult res) +// { +// // draw only if generation is larger than the current, else we have aldready drawn something newer +// // we must to check also IsHandleCreated because during disposal, the handle of the parent is detroyed sooner than progress bar's handle, +// // this leads to cross thread operation and exception because InvokeRequired returns false, but for the progress bar it is true. +// if (res == null || res.generation < _imageGeneration || _isDisposed || !IsHandleCreated) +// return; + + +// if (_logger.IsDebugEnabled) +// _logger.DebugFormat("{2}: {0} - {1}", res.generation, res.bbox, DateTime.Now); + + +// if ((_setActiveToolNoneDuringRedraw || ShowProgressUpdate) && InvokeRequired) +// { +// try +// { +// BeginInvoke(new MethodInvoker(() => GetImagesAsyncEnd(res))); + +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } +// else +// { +// try +// { +// var oldRef = _image; +// if (Width > 0 && Height > 0) +// { + +// var bmp = new Bitmap(Width, Height); + + +// using (var g = Graphics.FromImage(bmp)) +// { +// g.Clear(_map.BackColor); +// lock (_backgroundImagesLocker) +// { +// //Draws the background Image +// if (_imageBackground != null) +// { +// try +// { +// g.DrawImageUnscaled(_imageBackground, 0, 0); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } +// } + +// //Draws the static images +// if (_staticImagesLocker != null) +// { +// try +// { +// if (_imageStatic != null) +// { +// g.DrawImageUnscaled(_imageStatic, 0, 0); +// } +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } + +// } + +// //Draws the variable Images +// if (_imageVariable != null) +// { +// try +// { +// g.DrawImageUnscaled(_imageVariable, 0, 0); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } +// } + +// g.Dispose(); +// } + + +// lock (_paintImageLocker) +// { +// _image = bmp; +// _imageEnvelope = res.bbox; +// } +// } + +// if (res.Tool.HasValue) +// { +// if (_setActiveToolNoneDuringRedraw) +// ActiveTool = res.Tool.Value; + +// _dragEndPoint = new Point(0, 0); +// _isRefreshing = false; + +// if (_setActiveToolNoneDuringRedraw) +// Enabled = true; + +// if (ShowProgressUpdate) +// { +// _progressBar.Enabled = false; +// _progressBar.Visible = false; +// } +// } + +// lock (_paintImageLocker) +// { +// if (oldRef != null) +// oldRef.Dispose(); +// } + +// Invalidate(); +// } +// catch (Exception ex) +// { +// _logger.Warn(ex.Message, ex); +// } + +//#if DEBUG +// _watch.Stop(); +// LastRefreshTime = _watch.Elapsed; +//#endif + +// try +// { +// if (MapRefreshed != null) +// { +// MapRefreshed(this, null); +// } +// } +// catch (Exception ee) +// { +// //Trap errors that occured when calling the eventhandlers +// _logger.Warn("Exception while calling eventhandler", ee); +// } +// } +// } + + //private void UpdateImage(bool forceRefresh) + //{ + // if (_isDisposed || IsDisposed) + // return; + + // if (((_imageStatic == null && _imageVariable == null && _imageBackground == null) && !forceRefresh) || + // (Width == 0 || Height == 0)) return; + + // Envelope bbox = _map.Envelope; + // if (forceRefresh) // && _isRefreshing == false) + // { + // _isRefreshing = true; + // Tools oldTool = ActiveTool; + // if (_setActiveToolNoneDuringRedraw) + // { + // ActiveTool = Tools.None; + // Enabled = false; + // } + + // if (ShowProgressUpdate) + // { + // if (InvokeRequired) + // { + // _progressBar.BeginInvoke(new Action(p => + // { + // p.Visible = true; + // p.Enabled = true; + // }), _progressBar); + // } + // else + // { + // _progressBar.Visible = true; + // _progressBar.Enabled = true; + // } + // } + + // int generation = ++_imageGeneration; + // ThreadPool.QueueUserWorkItem( + // delegate + // { + // GetImagesAsync(bbox, generation); + // GetImagesAsyncEnd(new GetImageEndResult + // {Tool = oldTool, bbox = bbox, generation = generation}); + // }); + // } + // else + // { + // GetImagesAsyncEnd(new GetImageEndResult {Tool = null, bbox = bbox, generation = _imageGeneration}); + // } + //} + + + private void SetCursor() + { + if (InvokeRequired) + { + BeginInvoke(new MethodInvoker(SetCursor)); + return; + } + + switch (_activeTool) + { + case Tools.None: + Cursor = Cursors.Default; + break; + case Tools.Pan: + Cursor = Cursors.Hand; + break; + case Tools.QueryBox: + case Tools.QueryPoint: + Cursor = Cursors.Help; + break; + case Tools.ZoomIn: + case Tools.ZoomOut: + Cursor = Cursors.Cross; + break; + case Tools.DrawPoint: + case Tools.DrawLine: + case Tools.DrawPolygon: + Cursor = Cursors.Cross; + break; + case Tools.Custom: + Cursor = _currentTool.Cursor; + break; + } + } + + + /// + /// Refreshes the map + /// + public override void Refresh() + { + try + { + //Protect against cross-thread operations... + //We need this since we're modifying the cursor + if (InvokeRequired) + { + Invoke(new MethodInvoker(Refresh)); + return; + } +#if DEBUG + _watch.Reset(); + _watch.Start(); +#endif + if (_map != null) + { + _map.Size = ClientSize; + if ((_map.Layers == null || _map.Layers.Count == 0) && + (_map.BackgroundLayer == null || _map.BackgroundLayer.Count == 0) && + (_map.VariableLayers == null || _map.VariableLayers.Count == 0)) + ; //_image = null; + else + { + Cursor c = Cursor; + if (_setActiveToolNoneDuringRedraw) + { + Cursor = Cursors.WaitCursor; + } + + _miRenderer.Generate(); + if (_setActiveToolNoneDuringRedraw) + { + Cursor = c; + } + } + } + } + catch (Exception ex) + { + _logger.Warn(ex.Message, ex); + } + } + + + private static Boolean IsControlPressed + { + get { return (ModifierKeys & Keys.ControlKey) == Keys.ControlKey; } + } + + + private Point _lastHoverPostiton; + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnMouseHover(EventArgs e) + { + _logger.DebugFormat("Hover at {0}", MousePosition); + + // update the last hover position + _lastHoverPostiton = PointToClient(MousePosition); + + // If required test and grab focus + if (_focusOnHover) + TestAndGrabFocus(); + + // Invoke the base implementation + base.OnMouseHover(e); + + // Do we have a custom tool, execute it + if (UseCurrentTool) + { + var p = _map.ImageToWorld((_lastHoverPostiton)); + if (_currentTool.DoMouseHover(p)) + return; + } + } + + private void TestAndGrabFocus() + { + if (!Focused) + { + var isFocused = Focus(); + _logger.Debug("Focused: " + isFocused); + } + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + if (UseCurrentTool) + { + if (_currentTool.DoMouseEnter()) + return; + } + } + + /// + /// Raises the event. + /// + /// An that contains the event data. + protected override void OnMouseLeave(EventArgs e) + { + _logger.DebugFormat( "MouseLeave {0}", Name); + + base.OnMouseLeave(e); + if (UseCurrentTool) + { + if (_currentTool.DoMouseLeave()) + return; + } + } + + + private System.Timers.Timer _mouseWheelRefreshTimer; + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnMouseWheel(MouseEventArgs e) + { + _logger.DebugFormat("MouseWheel {0} ({1})", e.Location, e.Delta); + base.OnMouseWheel(e); + + if (_map != null) + { + // Do we have a custom tool + if (UseCurrentTool) + { + if (_currentTool.DoMouseWheel(_map.ImageToWorld(e.Location), e)) + return; + } + + // oldZoom and oldHeight are the APPARENT width amd height of the map in world coordinates, + // even when a MapTransform is applied (ie NOT the same as Envelope.Width amd Height) + var oldCenter = _map.Center; + var oldZoom = _map.Zoom; + var oldHeight = _map.MapHeight; + + var scale = (e.Delta / 120.0); + var scaleBase = 1 + (_wheelZoomMagnitude/(10*(IsControlPressed ? _fineZoomFactor : 1))); + var scaleFactor = Math.Pow(scaleBase, scale); + + if (!ZoomToPointer) + // zoom in/out maintaining existing centre + _map.Zoom = oldZoom * scaleFactor; + else + { + // preserve MAP cursor posn + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); + + var newCenter = new Coordinate( + p.X + (oldCenter.X - p.X) * scaleFactor, + p.Y + (oldCenter.Y - p.Y) * scaleFactor + ); + + var newWidth = oldZoom * scaleFactor; + var newHeight = oldHeight * scaleFactor; + + var bbox = new Envelope( + newCenter.X - newWidth * 0.5, + newCenter.X + newWidth * 0.5, + newCenter.Y - newHeight * 0.5, + newCenter.Y + newHeight * 0.5); + + if (_map.EnforceMaximumExtents && !_map.MaximumExtents.IsNull && !_map.MaximumExtents.Contains(bbox)) + return; + + // more efficient that Center + Zoom. + // careAboutTransform == false: new center, width, and height will be adopted + // from bbox without applying correction for map rotation. + _map.ZoomToBox(bbox, false); + } + + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) + { + Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); + OnMapCenterChanged(_map.Center); + } + + if (Math.Abs(_map.Zoom - oldZoom) > PrecisionTolerance) + { + Interlocked.Exchange(ref _needToRefreshAfterWheel, 1); + OnMapZoomChanged(_map.Zoom); + } + + Invalidate(); + + if (_mouseWheelRefreshTimer == null) + { + _mouseWheelRefreshTimer = new System.Timers.Timer(50); + _mouseWheelRefreshTimer.Elapsed += TimerUpdate; + _mouseWheelRefreshTimer.Enabled = true; + _mouseWheelRefreshTimer.AutoReset = false; + _mouseWheelRefreshTimer.Start(); + } + else + { + _mouseWheelRefreshTimer.Stop(); + _mouseWheelRefreshTimer.Start(); + } + } + } + + private void TimerUpdate(object state, System.Timers.ElapsedEventArgs args) + { + _logger.Debug("TimerRefresh"); + if (Interlocked.CompareExchange(ref _needToRefreshAfterWheel, 0, 1)==1) + { + OnMapZoomChanged(_map.Zoom); + + Refresh(); + } + } + + private Coordinate _dragStartCenter; + private Matrix _dragTransform; + private double _orgScale; + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnMouseDown(MouseEventArgs e) + { + _logger.DebugFormat("MouseDown {0} ({1}, {2})", Name, e.Location, e.Button); + + // call base function + base.OnMouseDown(e); + + // Do we have a map? If not bail out + if (_map == null) + return; + + // Position in world coordinates + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); + + // Raise event + if (MouseDown != null) + MouseDown(p, e); + + // Do we have a custom tool + if (UseCurrentTool) + { + if (_currentTool.DoMouseDown(p, e)) + return; + } + + + // Do we have a predefined tool + if (_activeTool == Tools.None) + return; + + if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) //dragging + { + _dragStartPoint = e.Location; + _dragEndPoint = e.Location; + _dragStartCenter = _map.Center; + + _dragTransform = new Matrix(); + _dragTransform.Translate(-e.X, -e.Y); + _dragTransform.Scale(1f, -1f, MatrixOrder.Append); // reflect in X axis + if (_map.MapTransformRotation.Equals(0f)) + _dragTransform.Scale((float)_map.PixelWidth, (float)_map.PixelHeight, MatrixOrder.Append); + else + { + _dragTransform.Rotate(_map.MapTransformRotation, MatrixOrder.Append); + // NB Zoom and MapHeight are APPARENT real-world dimensions of rotated viewport (NOT the same as Env.Width and Height) + _dragTransform.Scale((float)(_map.Zoom / Width), (float)(_map.MapHeight / Height), MatrixOrder.Append); + } + _dragTransform.Translate((float)p.X, (float)p.Y, MatrixOrder.Append); + + _orgScale = _map.Zoom; + } + } + + //private bool ActionCheck(object sender, EventArgs e, Action baseFunction, out Coordinate point, + // Action mapDelegate) + //{ + // // call base function + // if (baseFunction != null) + // baseFunction(sender, e); + + // // Do we have a map? + // point = null; + // if (_map == null) + // return false; + + // // Do we have a map delegate + // if (e is MouseEventArgs && mapDelegate != null) + // { + // point = _map.ImageToWorld(((MouseEventArgs) e).Location); + // mapDelegate(point, e); + // } + + // // Do we have an active predefined tool + // return _activeTool != Tools.None; + //} + + /// + /// Private method to check if we need to reenable the event. + /// + /// The current position of the cursor + private void CheckEnableHover(Point position) + { + var delta = new Size(position.X - _lastHoverPostiton.X, + position.Y - _lastHoverPostiton.Y); + + if (Math.Abs(delta.Width) > SystemInformation.MouseHoverSize.Width || + Math.Abs(delta.Height) > SystemInformation.MouseHoverSize.Height) + { + ResetMouseEventArgs(); + } + + } + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnMouseMove(MouseEventArgs e) + { + // call base function + base.OnMouseMove(e); + + // Do we have a map? If not bail out + if (_map == null) + { + CheckEnableHover(e.Location); + return; + } + + // Position in world coordinates + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); + + // Raise event + if (MouseMove != null) + MouseMove(p, e); + + // Do we have a custom tool + if (UseCurrentTool) + { + if (_currentTool.DoMouseMove(p, e)) + { + CheckEnableHover(e.Location); + return; + } + } + + + // If no tool is selected, bail out + if (ActiveTool == Tools.None) + { + CheckEnableHover(e.Location); + return; + } + + bool isStartDrag = //_image != null && e.Location != _dragStartPoint && !_dragging && + _miRenderer.ImageValue != null && e.Location != _dragStartPoint && !_dragging && + (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) && + //Left of middle button can start drag + !(_setActiveToolNoneDuringRedraw && + (_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPoint || + _activeTool == Tools.DrawPolygon)); //It should not be any of these tools + + if (isStartDrag) + { + _dragging = true; + } + + if (_dragging) + { + if (MouseDrag != null) + MouseDrag(p, e); + + //Pan can be if we have ActiveTool Pan and not doing a ShiftButtonZoom-Operation + bool isPanOperation = _activeTool == Tools.Pan && + !(_shiftButtonDragRectangleZoom && + (ModifierKeys & Keys.Shift) != Keys.None); + + //Pan can also be if we are in a drawline/drawpoint/drawpoly operation and pressed left mousebutton while dragging.. + //If we not are setting tool non while redrawing.. + if ((_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon) + && e.Button == MouseButtons.Left && !_setActiveToolNoneDuringRedraw) + { + isPanOperation = true; + } + + + //Zoom in or Zoom Out + bool isZoomOperation = _activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut; + + //Tool ZoomWindow or ShiftButtonDragRectangle + bool isZoomWindowOperation = _activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox || + //_activeTool == Tools.QueryPoint || + /*_activeTool == Tools.QueryPolygon || */ + (_shiftButtonDragRectangleZoom && + (ModifierKeys & Keys.Shift) != Keys.None); + + if (isPanOperation) + { + _dragEndPoint = ClipPoint(e.Location); + if (_dragStartCenter != null) + { + var pts = new[] { + new PointF(_dragStartPoint.X, _dragStartPoint.Y), + new PointF(_dragEndPoint.X, _dragEndPoint.Y) + }; + + _dragTransform.TransformPoints(pts); + + var dX = (pts[1].X - pts[0].X); + var dY = (pts[1].Y - pts[0].Y); + + _map.Center = new Coordinate(_dragStartCenter.X - dX, _dragStartCenter.Y - dY); + + if (!_map.Center.Equals2D(_dragStartCenter, PrecisionTolerance)) + { + OnMapCenterChanged(_map.Center); + + Invalidate(ClientRectangle); + } + } + } + else if (isZoomOperation) + { + _dragEndPoint = ClipPoint(e.Location); + if (_dragEndPoint.Y - _dragStartPoint.Y < 0) //Zoom out + _scaling = (float) Math.Pow(1/(float) (_dragStartPoint.Y - _dragEndPoint.Y), 0.5); + else //Zoom in + _scaling = 1 + (_dragEndPoint.Y - _dragStartPoint.Y)*0.1f; + + _map.Zoom = _orgScale/_scaling; + if (MapZooming != null) + MapZooming(_map.Zoom); + + Invalidate(ClientRectangle); + } + else if (isZoomWindowOperation) + { + _dragEndPoint = ClipPoint(e.Location); + _rectangle = GenerateRectangle(_dragStartPoint, _dragEndPoint); + Invalidate(new Region(ClientRectangle)); + } + } + else + { + if (_activeTool == Tools.DrawPolygon || _activeTool == Tools.DrawLine) + { + _dragEndPoint = new Point(0, 0); + if (_pointArray != null) + { + _pointArray[_pointArray.Count - 1] = Map.ImageToWorld(ClipPoint(e.Location)); + _rectangle = GenerateRectangle(_dragStartPoint, ClipPoint(e.Location)); + Invalidate(new Region(ClientRectangle)); + } + } + } + + CheckEnableHover(e.Location); + } + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnKeyDown(KeyEventArgs e) + { +#if EnableMetafileClipboardSupport + if (e.Control && e.KeyCode == Keys.C) + { + Clipboard.Clear(); + ClipboardMetafileHelper.PutEnhMetafileOnClipboard(Handle, _map.GetMapAsMetafile()); + e.Handled = true; + } +#endif + + if (UseCurrentTool) + { + _currentTool.DoKeyDown(_map.ImageToWorld(MousePosition), e); + } + base.OnKeyDown(e); + } + + private bool UseCurrentTool { get { return _currentTool != null && _currentTool.Enabled; }} + + internal bool Dragging + { + get => _dragging; + } + + public object MapLocker => _mapLocker; + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected virtual void OnMapChanging(CancelEventArgs e) + { + if (MapChanging != null) MapChanging(this, e); + if (e.Cancel) + return; + + //if (_map != null) + //{ + // _map.VariableLayers.VariableLayerCollectionRequery -= HandleVariableLayersRequery; + // _map.MapNewTileAvaliable -= HandleMapNewTileAvaliable; + // _map.RefreshNeeded -= HandleRefreshNeeded; + //} + } + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected virtual void OnMapChanged(EventArgs e) + { + if (_map != null) + { + //_map.VariableLayers.VariableLayerCollectionRequery += HandleVariableLayersRequery; + //_map.MapNewTileAvaliable += HandleMapNewTileAvaliable; + //_map.RefreshNeeded += HandleRefreshNeeded; + Refresh(); + } + + // Assign the map to the custom tool, too. + if (_currentTool != null) _currentTool.Map = _map; + + var handler = MapChanged; + if (handler != null) handler(this, e); + } + + internal protected virtual void OnMapRefreshed(EventArgs e) + { + MapRefreshed?.Invoke(this, e); + } + + /// + /// Invokes the event. + /// + /// + protected virtual void OnMapZoomChanged(double zoom) + { + var handler = MapZoomChanged; + if (handler != null) + handler(zoom); + } + + /// + /// Invokes the event. + /// + /// + protected virtual void OnMapCenterChanged(Coordinate center) + { + var handler = MapCenterChanged; + if (handler != null) + handler(center); + } + + //void HandleRefreshNeeded(object sender, EventArgs e) + //{ + // UpdateImage(true); + //} + + /* + private void RegenerateZoomingImage() + { + var c = Cursor; + Cursor = Cursors.WaitCursor; + _map.Zoom /= _scaling; + lock (_mapLocker) + { + _image = _map.GetMap(); + } + _scaling = 1; + _dragImage = GenerateDragImage(PreviewModes.Best); + _dragStartPoint = _dragEndPoint; + Cursor = c; + } + + private Bitmap GenerateDragImage(PreviewModes mode) + { + if (mode == PreviewModes.Best) + { + Cursor c = Cursor; + Cursor = Cursors.WaitCursor; + + Coordinate realCenter = _map.Center; + Bitmap bmp = new Bitmap(_map.Size.Width*3, _map.Size.Height*3); + Graphics g = Graphics.FromImage(bmp); + + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + if (i == 0 && j == 0) + { + var clone = _image.Clone() as Image; + if (clone != null) + g.DrawImageUnscaled(clone, _map.Size.Width, _map.Size.Height); + } + else + g.DrawImageUnscaled(GeneratePartialBitmap(realCenter, (XPosition) i, (YPosition) j), + (i + 1)*_map.Size.Width, (j + 1)*_map.Size.Height); + } + } + g.Dispose(); + _map.Center = realCenter; + + Cursor = c; + + return bmp; + } + if (_image.PixelFormat != PixelFormat.Undefined) + return _image.Clone() as Bitmap; + return null; + } + + private Bitmap GeneratePartialBitmap(Coordinate center, XPosition xPos, YPosition yPos) + { + double x = center.X, y = center.Y; + + switch (xPos) + { + case XPosition.Right: + x += _map.Envelope.Width; + break; + case XPosition.Left: + x -= _map.Envelope.Width; + break; + } + + switch (yPos) + { + case YPosition.Top: + y += _map.Envelope.Height; + break; + case YPosition.Bottom: + y -= _map.Envelope.Height; + break; + } + + _map.Center = new Coordinate(x, y); + return _map.GetMap() as Bitmap; + } + */ + + private Point ClipPoint(Point p) + { + var x = p.X < 0 ? 0 : (p.X > ClientSize.Width ? ClientSize.Width : p.X); + var y = p.Y < 0 ? 0 : (p.Y > ClientSize.Height ? ClientSize.Height : p.Y); + return new Point(x, y); + } + + private static Rectangle GenerateRectangle(Point p1, Point p2) + { + var x = Math.Min(p1.X, p2.X); + var y = Math.Min(p1.Y, p2.Y); + var width = Math.Abs(p2.X - p1.X); + var height = Math.Abs(p2.Y - p1.Y); + + return new Rectangle(x, y, width, height); + } + + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnPaint(PaintEventArgs pe) + { + try + { + if (_logger.IsDebugEnabled) + _logger.Debug($"OnPaint ({pe.ClipRectangle}), ActiveTool: {Enum.GetName(typeof(Tools), _activeTool)}"); + + //Console.WriteLine($"OnPaint ({pe.ClipRectangle.ToString()})"); + + if (_dragging) + { + if (_activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox || + (_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) + { + var image = (Bitmap) _miRenderer.ImageValue; + + //Reset image to normal view + using (var patch = image.Clone(pe.ClipRectangle, PixelFormat.DontCare)) + pe.Graphics.DrawImageUnscaled(patch, pe.ClipRectangle); + + //Draw selection rectangle + if (_rectangle.Width > 0 && _rectangle.Height > 0) + { + pe.Graphics.FillRectangle(_rectangleBrush, _rectangle); + var border = new Rectangle(_rectangle.X + (int) _rectanglePen.Width/2, + _rectangle.Y + (int) _rectanglePen.Width/2, + _rectangle.Width - (int) _rectanglePen.Width, + _rectangle.Height - (int) _rectanglePen.Width); + pe.Graphics.DrawRectangle(_rectanglePen, border); + } + } + else if (_activeTool == Tools.Pan || _activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || + _activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon) + { + var image = _miRenderer.ImageValue; + var imageEnvelope = _miRenderer.ImageEnvelope; + if (_map.Envelope.Equals(imageEnvelope)) + pe.Graphics.DrawImageUnscaled(image, 0, 0); + else if (_activeTool == Tools.Pan) + { + var dX = (_dragEndPoint.X - _dragStartPoint.X); + var dY = (_dragEndPoint.Y - _dragStartPoint.Y); + pe.Graphics.DrawImageUnscaled(image, dX, dY); + } + else + { + var ul = _map.WorldToImage(imageEnvelope.TopLeft()); + var lr = _map.WorldToImage(imageEnvelope.BottomRight()); + pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); + } + } + // + // This is never going to happen with the above condition in place + // + /* + else if (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut) + { + var rect = new RectangleF(0, 0, _map.Size.Width, _map.Size.Height); + + if (_map.Zoom/_scaling < _map.MinimumZoom) + _scaling = (float) Math.Round(_map.Zoom/_map.MinimumZoom, 4); + + if (_previewMode == PreviewModes.Best) + _scaling *= 3; + + rect.Width *= _scaling; + rect.Height *= _scaling; + + rect.Offset(_map.Size.Width/2f - rect.Width/2, _map.Size.Height/2f - rect.Height/2); + + + pe.Graphics.DrawImage(_dragImage, rect); + }*/ + } + else + { + var image = _miRenderer.ImageValue; + if (image != null && image.PixelFormat != PixelFormat.Undefined) + { + + var imageEnvelope = _miRenderer.ImageEnvelope; + if (_map.Envelope.Equals(imageEnvelope)) + pe.Graphics.DrawImageUnscaled(image, 0, 0); + else { + var ul = _map.WorldToImage(imageEnvelope.TopLeft()); + var lr = _map.WorldToImage(imageEnvelope.BottomRight()); + pe.Graphics.DrawImage(image, RectangleF.FromLTRB(ul.X, ul.Y, lr.X, lr.Y)); + } + } + } + + //Draws current line or polygon (Draw Line or Draw Polygon tool) + if (_pointArray != null) + { + if (_pointArray.Count == 1) + { + var p1 = Map.WorldToImage(_pointArray[0]); + var p2 = Map.WorldToImage(_pointArray[1]); + pe.Graphics.DrawLine(new Pen(Color.Gray, 2F), p1, p2); + } + else + { + var pts = new PointF[_pointArray.Count]; + for (int i = 0; i < pts.Length; i++) + pts[i] = Map.WorldToImage(_pointArray[i]); + + if (_activeTool == Tools.DrawPolygon) + { + Color c = Color.FromArgb(127, Color.Gray); + pe.Graphics.FillPolygon(new SolidBrush(c), pts); + pe.Graphics.DrawPolygon(new Pen(Color.Gray, 2F), pts); + } + else + { + if (pts.Length > 0) + pe.Graphics.DrawLines(new Pen(Color.Gray, 2F), pts); + } + } + } + + // Invoke the base implementation to get the event fired + base.OnPaint(pe); + + // Do we have a custom tool + if (UseCurrentTool) { _currentTool.DoPaint(pe); } + + /*Draw Floating Map-Decorations*/ + if (_map != null && _map.Decorations != null) + { + foreach (Rendering.Decoration.IMapDecoration md in _map.Decorations) + { + md.Render(pe.Graphics, _map); + } + } + } + catch (Exception ee) + { + _logger.Error(ee); + } + } + + /// + /// Invokes the -event. + /// + /// A that contains the event arguments. + protected override void OnMouseUp(MouseEventArgs e) + { + _logger.DebugFormat("MouseUp {0} ({1}, {2})", Name, e.Location, e.Button); + + // call base function + base.OnMouseUp(e); + + // Do we have a map? If not bail out + if (_map == null) + return; + + // Position in world coordinates + var p = _map.ImageToWorld(new Point(e.X, e.Y), true); + + // Raise event + if (MouseUp != null) + MouseUp(p, e); + + // Do we have a custom tool + if (UseCurrentTool) + { + if (_currentTool.DoMouseUp(p, e)) + return; + } + + // If no tool is selected, bail out + if (_activeTool == Tools.None) + return; + + bool needToRefresh = false; + + if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Middle) + { + if (_activeTool == Tools.ZoomOut) + { + double scale = 0.5; + if (_dragging) + { + if (e.Y - _dragStartPoint.Y < 0) //Zoom out + scale = (float) Math.Pow(1/(float) (_dragStartPoint.Y - e.Y), 0.5); + else //Zoom in + scale = 1 + (e.Y - _dragStartPoint.Y)*0.1; + } + else + { + var oldCenter = _map.Center; + + _map.Center = _map.ImageToWorld(new Point(e.X, e.Y)); + + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) + { + needToRefresh = true; + OnMapCenterChanged(_map.Center); + } + } + + var oldZoom = _map.Zoom; + + _map.Zoom /= scale; + + if (Math.Abs(oldZoom - _map.Zoom) > PrecisionTolerance) + { + needToRefresh = true; + OnMapZoomChanged(_map.Zoom); + } + + } + else if (_activeTool == Tools.ZoomIn) + { + double scale = 2; + if (_dragging) + { + if (e.Y - _dragStartPoint.Y < 0) //Zoom out + scale = (float) Math.Pow(1/(float) (_dragStartPoint.Y - e.Y), 0.5); + else //Zoom in + scale = 1 + (e.Y - _dragStartPoint.Y)*0.1; + } + else + { + var oldCenter = _map.Center; + _map.Center = _map.ImageToWorld(new Point(e.X, e.Y)); + + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance)) + { + needToRefresh = true; + OnMapCenterChanged(_map.Center); + } + + } + + var oldZoom = _map.Zoom; + _map.Zoom =oldZoom * 1/scale; + + if (Math.Abs(_map.Zoom - oldZoom) > PrecisionTolerance) + { + needToRefresh = true; + OnMapZoomChanged(_map.Zoom); + } + + } + else if ((_activeTool == Tools.Pan && + !(_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) || + (e.Button == MouseButtons.Left && _dragging && + (_activeTool == Tools.DrawLine || _activeTool == Tools.DrawPolygon))) + { + if (_dragging) + { + if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) + { + needToRefresh = true; + OnMapCenterChanged(_map.Center); + } + + } + else + { + if (_panOnClick) + { + var oldValue = _map.Center; + _map.Center = p; + + if (!_map.Center.Equals2D(oldValue, PrecisionTolerance)) + { + needToRefresh = true; + OnMapCenterChanged(_map.Center); + } + } + } + } + else if (_activeTool == Tools.QueryBox || _activeTool == Tools.QueryPoint + /*|| _activeTool == Tools.QueryPolygon*/) + { + //OnMouseUpQuery(e); + var mqs = MapQueryStarted; + if (mqs != null) + mqs(this, new EventArgs()); + + var layersToQuery = GetLayersToQuery(); + + if (layersToQuery.Count > 0) + { + var foundData = false; + foreach (var layer in layersToQuery) + { + Envelope bounding; + var isPoint = false; + if (_dragging) + { + Coordinate lowerLeft, upperRight; + GetBounds(_map.ImageToWorld(_dragStartPoint), _map.ImageToWorld(_dragEndPoint), + out lowerLeft, out upperRight); + + bounding = new Envelope(lowerLeft, upperRight); + } + else + { + bounding = new Envelope(_map.ImageToWorld(new Point(e.X, e.Y))); + bounding = bounding.Grow(_map.PixelSize*_queryGrowFactor); + isPoint = true; + } + + var ds = new Data.FeatureDataSet(); + if (_activeTool == Tools.QueryBox) + { + layer.ExecuteIntersectionQuery(bounding, ds); + } + else + { + IGeometry geom; + if (isPoint && QueryGrowFactor == 0) + geom = _map.Factory.CreatePoint(_map.ImageToWorld(new Point(e.X, e.Y))); + else + geom = _map.Factory.ToGeometry(bounding); + layer.ExecuteIntersectionQuery(geom, ds); + } + + if (MapQueried != null) + { + if (ds.Tables.Count > 0) + { + //Fire the event for all the resulting tables + foreach (var dt in ds.Tables) + { + if (dt.Rows.Count > 0) + { + MapQueried(dt); + foundData = true; + if (_mapQueryMode == MapQueryType.TopMostLayer) + break; + } + } + } + else + { + if (_mapQueryMode == MapQueryType.LayerByIndex) + MapQueried( + new Data.FeatureDataTable(new System.Data.DataTable(layer.LayerName))); + } + } + + //If we found data and querymode is TopMostLayer we should abort now.. + if (foundData && _mapQueryMode == MapQueryType.TopMostLayer) + { + break; + } + } + } + var mqd = MapQueryDone; + if (mqd != null) + mqd(this, new EventArgs()); + } + + else if (_activeTool == Tools.ZoomWindow || + (_shiftButtonDragRectangleZoom && (ModifierKeys & Keys.Shift) != Keys.None)) + { + if (_rectangle.Width > 0 && _rectangle.Height > 0) + { + var zoomWindowStartPoint = _dragStartPoint; + var zoomWindowEndPoint = new PointF(e.X, e.Y); + + Coordinate lowerLeft; + Coordinate upperRight; + GetBounds( + _map.ImageToWorld(zoomWindowStartPoint), + _map.ImageToWorld(zoomWindowEndPoint), + out lowerLeft, + out upperRight); + + _dragEndPoint.X = 0; + _dragEndPoint.Y = 0; + + var oldCenter = _map.Center; + var oldZoom = _map.Zoom; + + _map.ZoomToBox(new Envelope(lowerLeft, upperRight)); + + if (!_map.Center.Equals2D(oldCenter, PrecisionTolerance) || + Math.Abs(oldZoom - _map.Zoom) > PrecisionTolerance) + { + needToRefresh = true; + OnMapZoomChanged(_map.Zoom); + } + else + { + // we must to cancel the selected area anyway + Invalidate(); + } + } + } + else if (_activeTool == Tools.DrawPoint) + { + if (GeometryDefined != null) + { + GeometryDefined(_map.Factory.CreatePoint(Map.ImageToWorld(new PointF(e.X, e.Y)))); + } + } + else if (_activeTool == Tools.DrawPolygon || _activeTool == Tools.DrawLine) + { + //pointArray = null; + if (_pointArray == null) + { + _pointArray = new List(2); + _pointArray.Add(Map.ImageToWorld(e.Location)); + _pointArray.Add(Map.ImageToWorld(e.Location)); + } + else + { + //var temp = new Coordinate[_pointArray.Count + 2]; + _pointArray.Add(Map.ImageToWorld(e.Location)); + } + } + } + + + if (_dragging) + { + _dragging = false; + if (_activeTool == Tools.QueryBox) + Invalidate(_rectangle); + if (_activeTool == Tools.ZoomWindow || _activeTool == Tools.QueryBox + /*|| _activeTool == Tools.QueryPolygon*/) + _rectangle = Rectangle.Empty; + + if (_dragStartCenter == null || !_dragStartCenter.Equals2D(_map.Center, PrecisionTolerance)) + Refresh(); + + if (_dragTransform != null) + _dragTransform.Dispose(); + } + else if (needToRefresh && (_activeTool == Tools.ZoomIn || _activeTool == Tools.ZoomOut || _activeTool == Tools.Pan)) + { + Refresh(); + } + } + + private List GetLayersToQuery() + { + var layersToQuery = new List(); + switch (_mapQueryMode) + { + case MapQueryType.LayerByIndex: + if (_map.Layers.Count > _queryLayerIndex && _queryLayerIndex > -1) + { + var layer = _map.Layers[_queryLayerIndex] as ICanQueryLayer; + if (layer != null) + { + layersToQuery.Add(layer); + } + } + break; + case MapQueryType.TopMostLayer: + case MapQueryType.VisibleLayers: + foreach (var layer in _map.Layers) + { + var cqLayer = layer as ICanQueryLayer; + double visibleLevel = layer.VisibilityUnits == Styles.VisibilityUnits.ZoomLevel ? _map.Zoom : _map.MapScale; + if (cqLayer != null && layer.Enabled && layer.MinVisible < visibleLevel && + layer.MaxVisible >= visibleLevel && cqLayer.IsQueryEnabled) + layersToQuery.Add(cqLayer); + } + if (_mapQueryMode == MapQueryType.TopMostLayer) + layersToQuery.Reverse(); + break; + default: + foreach (var layer in _map.Layers) + { + var cqLayer = layer as ICanQueryLayer; + if (cqLayer != null && cqLayer.IsQueryEnabled) + layersToQuery.Add(cqLayer); + } + break; + } + + return layersToQuery; + } + + protected override void OnMouseDoubleClick(MouseEventArgs e) + { + // call base function + base.OnMouseDoubleClick(e); + + if (_map == null) + return; + + // Do we have an active tool? + if (_activeTool == Tools.None) + return; + + // Do we have a custom tool + if (UseCurrentTool) + { + if (_currentTool.DoMouseDoubleClick(_map.ImageToWorld(e.Location), e)) + return; + } + + + if (_activeTool == Tools.DrawPolygon) + { + if (GeometryDefined != null) + { + var cl = new NetTopologySuite.Geometries.CoordinateList(_pointArray, false); + cl.CloseRing(); + GeometryDefined(Map.Factory.CreatePolygon(Map.Factory.CreateLinearRing(NetTopologySuite.Geometries.CoordinateArrays.AtLeastNCoordinatesOrNothing(4, cl.ToCoordinateArray())), null)); + } + ActiveTool = Tools.None; + } + + else if (_activeTool == Tools.DrawLine) + { + if (GeometryDefined != null) + { + var cl = new NetTopologySuite.Geometries.CoordinateList(_pointArray, false); + GeometryDefined(Map.Factory.CreateLineString(NetTopologySuite.Geometries.CoordinateArrays.AtLeastNCoordinatesOrNothing(2, cl.ToCoordinateArray()))); + } + ActiveTool = Tools.None; + } + } + + + private static void GetBounds(Coordinate p1, Coordinate p2, + out Coordinate lowerLeft, out Coordinate upperRight) + { + lowerLeft = new Coordinate(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y)); + upperRight = new Coordinate(Math.Max(p1.X, p2.X), Math.Max(p1.Y, p2.Y)); + + if (_logger.IsDebugEnabled) + { + _logger.Debug("p1: " + p1); + _logger.Debug("p2: " + p2); + _logger.Debug("lowerLeft: " + lowerLeft); + _logger.Debug("upperRight: " + upperRight); + } + } + + /// + /// MouseWheelGrabber is a MessageFilter that enables mousewheelcapture on mapcontrol even if the control does + /// not have focus as long as the mouse is positioned over the control + /// + private class MouseWheelGrabber : IMessageFilter + { + //[DllImport("user32.dll")] + //private static extern IntPtr WindowFromPoint(Point lpPoint); + + //[DllImport("user32.dll")] + //private static extern bool GetCursorPos(out Point lpPoint); + + //private static IntPtr GetWindowUnderCursor() + //{ + // Point ptCursor; + + // if (!(GetCursorPos(out ptCursor))) + // return IntPtr.Zero; + + // return WindowFromPoint(ptCursor); + //} + + private bool _mouseIn = false; + private readonly MapBox _redirectHandle; + + public MouseWheelGrabber(MapBox redirectHandle) + { + _redirectHandle = redirectHandle; + _redirectHandle.MouseEnter += HandleMouseEnter; + _redirectHandle.MouseLeave += HandleMouseLeave; + } + + private void HandleMouseLeave(object sender, EventArgs e) + { + _mouseIn = false; + } + + private void HandleMouseEnter(object sender, EventArgs e) + { + _mouseIn = true; + } + + public bool PreFilterMessage(ref Message m) + { + if (m.Msg == 0x020A) + { + var delta = ((int) (m.WParam.ToInt64() & 0xFFFF0000) >> 16); + var pt = _redirectHandle.PointToClient(new Point(m.LParam.ToInt32())); + if (_redirectHandle.ClientRectangle.Contains(pt)) + { + if (_mouseIn) + { + _redirectHandle.OnMouseWheel( + new MouseEventArgs(MouseButtons.Middle, 0, pt.X, pt.Y, delta)); + return true; + } + //var hWnd = GetWindowUnderCursor(); + //if (hWnd == _redirectHandle.Handle) + //{ + // _redirectHandle.OnMouseWheel( + // new MouseEventArgs(MouseButtons.Middle, 0, pt.X, pt.Y, delta)); + // return true; + //} + } + + } + + return false; + } + + } + + internal void ClearDrag() + { + _dragEndPoint = new Point(0, 0); + _dragging = false; + } + } + + + +#if EnableMetafileClipboardSupport + public class ClipboardMetafileHelper + { + [DllImport("user32.dll")] + static extern bool OpenClipboard(IntPtr hWndNewOwner); + + [DllImport("user32.dll")] + static extern bool EmptyClipboard(); + + [DllImport("user32.dll")] + static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem); + + [DllImport("user32.dll")] + static extern bool CloseClipboard(); + + [DllImport("gdi32.dll")] + static extern IntPtr CopyEnhMetaFile(IntPtr hemfSrc, IntPtr hNull); + + [DllImport("gdi32.dll")] + static extern bool DeleteEnhMetaFile(IntPtr hemf); + + /// + /// Puts the metafile to the clipboard + /// + /// The handle + /// The metafie + /// Metafile mf is set to a state that is not valid inside this function. + /// if operation was successfull + static public bool PutEnhMetafileOnClipboard(IntPtr hWnd, Metafile mf) + { + bool bResult = false; + IntPtr hEmf = mf.GetHenhmetafile(); + + if (!hEmf.Equals(new IntPtr(0))) + { + IntPtr hEmf2 = CopyEnhMetaFile(hEmf, new IntPtr(0)); + if (!hEmf2.Equals(new IntPtr(0))) + { + if (OpenClipboard(hWnd)) + { + if (EmptyClipboard()) + { + IntPtr hRes = SetClipboardData(14 /*CF_ENHMETAFILE*/, hEmf2); + bResult = hRes.Equals(hEmf2); + CloseClipboard(); + } + } + } + DeleteEnhMetaFile(hEmf); + } + return bResult; + } + } +#endif +} diff --git a/SharpMap.UI/Forms/ToolBar/MapZoomToolStrip.cs b/SharpMap.UI/Forms/ToolBar/MapZoomToolStrip.cs index c3721f41..aacfc5de 100644 --- a/SharpMap.UI/Forms/ToolBar/MapZoomToolStrip.cs +++ b/SharpMap.UI/Forms/ToolBar/MapZoomToolStrip.cs @@ -1,659 +1,664 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using System.Security.AccessControl; -using System.Windows.Forms; -using GeoAPI.Geometries; -using SharpMap.Properties; - -namespace SharpMap.Forms.ToolBar -{ - [DesignTimeVisible(true)] - public partial class MapZoomToolStrip : MapToolStrip - { - System.Windows.Forms.ToolStripButton _zoomToExtents; - System.Windows.Forms.ToolStripButton _fixedZoomIn; - System.Windows.Forms.ToolStripButton _fixedZoomOut; - System.Windows.Forms.ToolStripButton _zoomToWindow; - System.Windows.Forms.ToolStripButton _pan; - System.Windows.Forms.ToolStripButton _zoomPrev; - System.Windows.Forms.ToolStripButton _zoomNext; - System.Windows.Forms.ToolStripComboBox _predefinedScales; - System.Windows.Forms.ToolStripButton _minZoom; - System.Windows.Forms.ToolStripButton _maxZoom; - System.Windows.Forms.ToolStripButton _maxZoom2; - System.Windows.Forms.ToolStripButton _lock; - private System.Windows.Forms.ToolStripSeparator _sep1; - private System.Windows.Forms.ToolStripSeparator _sep2; - private System.Windows.Forms.ToolStripSeparator _sep3; - private System.Windows.Forms.ToolStripSeparator _sep4; - - /// - /// Creates an instance of this class - /// - public MapZoomToolStrip() - { - InitializeComponent(); - - AddScales(); - } - - /// - /// Creates an instance of this class - /// - public MapZoomToolStrip(IContainer container) - :base(container) - { - InitializeComponent(); - AddScales(); - } - - private void AddScales() - { - _predefinedScales.Items.AddRange(new object[] - { - "1:100", "1:250", "1:500", "1:1000", "1:2500", "1:5000", - "1:10000", "1:25000", "1:50000", "1:100000", "1:250000", - "1:500000", "1:1000000", "1:2500000", "1:5000000", "1:10000000" - }); - } - - public void InitializeComponent() - { - this._zoomToExtents = new System.Windows.Forms.ToolStripButton(); - this._fixedZoomIn = new System.Windows.Forms.ToolStripButton(); - this._fixedZoomOut = new System.Windows.Forms.ToolStripButton(); - this._sep1 = new System.Windows.Forms.ToolStripSeparator(); - this._zoomToWindow = new System.Windows.Forms.ToolStripButton(); - this._pan = new System.Windows.Forms.ToolStripButton(); - this._sep2 = new System.Windows.Forms.ToolStripSeparator(); - this._zoomPrev = new System.Windows.Forms.ToolStripButton(); - this._zoomNext = new System.Windows.Forms.ToolStripButton(); - this._sep3 = new System.Windows.Forms.ToolStripSeparator(); - this._predefinedScales = new System.Windows.Forms.ToolStripComboBox(); - this._sep4 = new System.Windows.Forms.ToolStripSeparator(); - this._minZoom = new System.Windows.Forms.ToolStripButton(); - this._maxZoom = new System.Windows.Forms.ToolStripButton(); - this._maxZoom2 = new System.Windows.Forms.ToolStripButton(); - this._lock = new System.Windows.Forms.ToolStripButton(); - this.SuspendLayout(); - // - // _zoomToExtents - // - this._zoomToExtents.Enabled = false; - this._zoomToExtents.Image = global::SharpMap.Properties.Resources.zoom_extent; - this._zoomToExtents.Name = "_zoomToExtents"; - this._zoomToExtents.Size = new System.Drawing.Size(23, 22); - this._zoomToExtents.ToolTipText = "Zoom to the map\'s extent"; - this._zoomToExtents.Click += this.OnFixedZoom; - // - // _fixedZoomIn - // - this._fixedZoomIn.Enabled = false; - this._fixedZoomIn.Image = global::SharpMap.Properties.Resources.zoom_in; - this._fixedZoomIn.Name = "_fixedZoomIn"; - this._fixedZoomIn.Size = new System.Drawing.Size(23, 22); - this._fixedZoomIn.ToolTipText = "Zoom into map"; - this._fixedZoomIn.Click += this.OnFixedZoom; - // - // _fixedZoomOut - // - this._fixedZoomOut.Enabled = false; - this._fixedZoomOut.Image = global::SharpMap.Properties.Resources.zoom_out; - this._fixedZoomOut.Name = "_fixedZoomOut"; - this._fixedZoomOut.Size = new System.Drawing.Size(23, 22); - this._fixedZoomOut.ToolTipText = "Zoom out of map"; - this._fixedZoomOut.Click += this.OnFixedZoom; - // - // _sep1 - // - this._sep1.Name = "_sep1"; - this._sep1.Size = new System.Drawing.Size(6, 6); - // - // _zoomToWindow - // - this._zoomToWindow.CheckOnClick = true; - this._zoomToWindow.Enabled = false; - this._zoomToWindow.Image = global::SharpMap.Properties.Resources.zoom_region; - this._zoomToWindow.Name = "_zoomToWindow"; - this._zoomToWindow.Size = new System.Drawing.Size(23, 20); - this._zoomToWindow.ToolTipText = "Specify viewport by mouse selection"; - this._zoomToWindow.CheckOnClick = true; - this._zoomToWindow.CheckedChanged += OnCheckedChanged; - // - // _pan - // - this._pan.CheckOnClick = true; - this._pan.Enabled = false; - this._pan.Image = global::SharpMap.Properties.Resources.pan; - this._pan.Name = "_pan"; - this._pan.Size = new System.Drawing.Size(23, 20); - this._pan.ToolTipText = "Drag the map\'s content around and scoll by mouse wheel"; - this._pan.CheckOnClick = true; - this._pan.CheckedChanged += OnCheckedChanged; - // - // _sep2 - // - this._sep2.Name = "_sep2"; - this._sep2.Size = new System.Drawing.Size(6, 6); - // - // _zoomPrev - // - this._zoomPrev.Enabled = false; - this._zoomPrev.Image = global::SharpMap.Properties.Resources.zoom_last; - this._zoomPrev.Name = "_zoomPrev"; - this._zoomPrev.Size = new System.Drawing.Size(23, 20); - this._zoomPrev.ToolTipText = "Zoom to previous viewport"; - this._zoomPrev.Click += (sender, args) => _zoomExtentStack.ZoomPrevious(); - // - // _zoomNext - // - this._zoomNext.Enabled = false; - this._zoomNext.Image = global::SharpMap.Properties.Resources.zoom_next; - this._zoomNext.Name = "_zoomNext"; - this._zoomNext.Size = new System.Drawing.Size(23, 20); - this._zoomNext.ToolTipText = "Restore last viewport"; - this._zoomNext.Click += (sender, args) => _zoomExtentStack.ZoomNext(); - // - // _sep3 - // - this._sep3.Name = "_sep3"; - this._sep3.Size = new System.Drawing.Size(6, 6); - // - // _predefinedScales - // - this._predefinedScales.Name = "_predefinedScales"; - this._predefinedScales.Size = new System.Drawing.Size(121, 23); - this._predefinedScales.SelectedIndexChanged += OnScaleSelected; - // - // _sep4 - // - this._sep4.Name = "_sep3"; - this._sep4.Size = new System.Drawing.Size(6, 6); - // - // _minZoom - // - this._minZoom.Enabled = false; - this._minZoom.Text = "min"; - this._minZoom.Name = "_minZoom"; - this._minZoom.Size = new System.Drawing.Size(23, 20); - this._minZoom.ToolTipText = "Set the minimum zoom level"; - this._minZoom.CheckOnClick = true; - this._minZoom.CheckedChanged += OnCheckedChanged; - // - // _maxZoom - // - this._maxZoom.Enabled = false; - this._maxZoom.Text = "max"; - this._maxZoom.Name = "_maxZoom"; - this._maxZoom.Size = new System.Drawing.Size(23, 20); - this._maxZoom.ToolTipText = "Set the maximum zoom level"; - this._maxZoom.CheckOnClick = true; - this._maxZoom.CheckedChanged += OnCheckedChanged; - // - // _maxZoom2 - // - this._maxZoom2.Enabled = false; - this._maxZoom2.Text = "max box"; - this._maxZoom2.Name = "_maxZoom2"; - this._maxZoom2.Size = new System.Drawing.Size(23, 20); - this._maxZoom2.ToolTipText = "Set the maximum zoom window"; - this._maxZoom2.CheckOnClick = true; - this._maxZoom2.CheckedChanged += OnCheckedChanged; - // - // _lock - // - this._lock.Enabled = false; - this._lock.Name = "_lock"; - this._lock.Size = new System.Drawing.Size(23, 20); - this._lock.ToolTipText = "Lock the viewport"; - this._lock.CheckOnClick = true; - this._lock.Image = global::SharpMap.Properties.Resources.unlocked; - this._lock.CheckedChanged += OnCheckedChanged; - // - // MapZoomToolStrip - // - this.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this._zoomToExtents, - this._fixedZoomIn, - this._fixedZoomOut, - this._sep1, - this._zoomToWindow, - this._pan, - this._sep2, - this._zoomPrev, - this._zoomNext, - this._sep3, - this._predefinedScales, - this._sep4, - this._minZoom, - this._maxZoom, - this._lock, - }); - this.Text = "MapZoomToolStrip"; - this.ResumeLayout(false); - - } - - - private void OnFixedZoom(object sender, EventArgs e) - { - if (MapControl == null) return; - - if (sender == _zoomToExtents) - { - MapControl.Map.ZoomToExtents(); - } - else if (sender == _zoomPrev) - { - _zoomExtentStack.ZoomPrevious(); - } - else if (sender == _zoomNext) - { - _zoomExtentStack.ZoomNext(); - } - else - { - var scale = sender == _fixedZoomIn ? 1d / 1.2d : 1.2d; - MapControl.Map.Zoom *= scale; - } - MapControl.Refresh(); - } - - #region ZoomExtentStack - - /// - /// An implementation of zoom previous/zoom next like *** MapControl - /// - [Serializable] - public class ZoomExtentStack - { - private readonly MapBox _mapBox; - private readonly List _zoomExtentStack = new List(); - private bool _blockStoringWhenPanning; - - /// - /// Value indicating if zoom changes that have been invoked by user interaction should be saved or not - /// - - private bool _storeExtentsUser; - /// - /// Value indicating if zoom changes that have been invoked by this class should be stored or not - /// - private bool _storeExtentsInternal; - - private int _index; - private bool _isPanning; - private int _skip = 0; - - /// - /// Initialisation; no extents will be stored until .StoreExtents = true - /// - /// mapbox control - public ZoomExtentStack(MapBox mapBox) - { - _mapBox = mapBox; - _mapBox.Map.MapViewOnChange += HandleMapMapViewOnChange; - _mapBox.MouseDown += HandleMapBoxMouseDown; - _mapBox.MouseUp += HandleMapBoxMouseUp; - _mapBox.MouseWheel += HandleMouseWheel; - } - - private void HandleMouseWheel(object sender, MouseEventArgs e) - { - // Is the map box going to keep the position under the cursor - // untouched? - if (_mapBox.ZoomToPointer) - { - /* - * For the computation of the new zoom and center, the - * Map.Center is moved, Map.Zoom is changed and Map.Center - * then reset. We only want the last viewport, this we're - * going to skip the next two zoom changes. - */ - _skip = 2; - } - } - - private void HandleMapBoxMouseDown(Coordinate worldPos, MouseEventArgs imagePos) - { - if (_mapBox.ActiveTool == MapBox.Tools.Pan) - { - //_blockStoringWhenPanning = false; - _isPanning = true; - Add(_mapBox.Map.Envelope); - } - } - - private void HandleMapBoxMouseUp(Coordinate worldPos, MouseEventArgs imagePos) - { - if (_mapBox.ActiveTool == MapBox.Tools.Pan) - { - //_blockStoringWhenPanning = true; - _isPanning = false; - } - } - - private void HandleMapMapViewOnChange() - { - - if (_storeExtentsUser && _storeExtentsInternal /*&& (!_blockStoringWhenPanning)*/) - { - if (_isPanning) - _zoomExtentStack[_index] = _mapBox.Map.Envelope; - else - Add(_mapBox.Map.Envelope); - } - else - _storeExtentsInternal = true; - } - - /// - /// If true extents will be stored, starting with the current; - /// if false no extents will be stored (paused). - /// - public bool StoreExtents - { - get { return _storeExtentsUser; } - set - { - if (value) Add(_mapBox.Map.Envelope); - _storeExtentsUser = value; - } - } - - /// - /// Erases the extents stack - /// - public void Clear() - { - _zoomExtentStack.Clear(); - _index = 0; - } - - /// - /// true if previous zoom is available - /// - public bool CanZoomPrevious - { - get { return (_index > 0); } - } - - /// - /// true if 'next' zoom is available - /// - public bool CanZoomNext - { - get { return (_index < _zoomExtentStack.Count - 1); } - } - - /// - /// Execute a zoom previous - /// - public void ZoomPrevious() - { - if (CanZoomPrevious) - { - _storeExtentsInternal = false; - _index--; - _mapBox.Map.ZoomToBox(_zoomExtentStack[_index]); - _mapBox.Refresh(); - } - } - - /// - /// Execute a zoom next - /// - public void ZoomNext() - { - if (CanZoomNext) - { - _storeExtentsInternal = false; - _index++; - _mapBox.Map.ZoomToBox(_zoomExtentStack[_index]); - _mapBox.Refresh(); - } - } - - /// - /// Adds the given extent to the stack - /// - /// the extent to be stored - private void Add(Envelope newExtent) - { - // remove all above index - if (_zoomExtentStack.Count - 1 > _index) - _zoomExtentStack.RemoveRange(_index + 1, _zoomExtentStack.Count - _index - 1); - // add given extent - _zoomExtentStack.Add(newExtent); - // correct index - if (_skip == 0) - _index = _zoomExtentStack.Count - 1; - else - _skip--; - } - } - - #endregion - - private void OnCheckedChanged(object sender, EventArgs e) - { - if (MapControl == null) return; - - var tsb = (System.Windows.Forms.ToolStripButton)sender; - - if (tsb == _pan) - TrySetActiveTool(tsb, MapBox.Tools.Pan); - - if (tsb == _zoomToWindow) - TrySetActiveTool(tsb, MapBox.Tools.ZoomWindow); - - if (tsb == _minZoom) - { - MapControl.Map.MinimumZoom = _minZoom.Checked - ? MapControl.Map.MinimumZoom = MapControl.Map.Zoom - : MapControl.Map.MinimumZoom = Double.Epsilon; - } - - if (tsb == _maxZoom) - { - MapControl.Map.MaximumZoom = _maxZoom.Checked - ? MapControl.Map.MaximumZoom = MapControl.Map.Zoom - : MapControl.Map.MaximumZoom = Double.MaxValue; - } - - if (tsb == _lock) - { - if (_lock.Checked) - { - mvpLock.Lock(); - tsb.Image = global::SharpMap.Properties.Resources.locked; - } - else - { - mvpLock.Unlock(); - tsb.Image = global::SharpMap.Properties.Resources.unlocked; - } - - } - } - - private MapViewportLock mvpLock; - - protected override void OnMapControlChangedInternal(EventArgs e) - { - if (MapControl == null) - return; - - //MapControl.MapZoomChanged += OnMapZoomChanged; - MapControl.MapChanging += HandleMapChanging; - MapControl.MapChanged += HandleMapChanged; - MapControl.Map.MapViewOnChange += OnMapMapViewOnChange; - MapControl.ActiveToolChanged += OnMapControlActiveToolChanged; - - - _fixedZoomIn.Enabled = - _fixedZoomOut.Enabled = - _zoomToExtents.Enabled = - _pan.Enabled = - _zoomToWindow.Enabled = - _minZoom.Enabled = - _maxZoom.Enabled = - _maxZoom2.Enabled = - _lock.Enabled = - /*_predefinedScales.Enabled =*/ - MapControl.Map != null; - - if (MapControl.Map != null) - { - _minZoom.Checked = MapControl.Map.MinimumZoom > Double.Epsilon; - _maxZoom.Checked = MapControl.Map.MaximumZoom < Double.MaxValue; - _maxZoom2.Checked = MapControl.Map.MaximumExtents != null; - } - - Visible = true; - _zoomExtentStack = new ZoomExtentStack(MapControl); - _zoomExtentStack.StoreExtents = true; - - mvpLock = new MapViewportLock(MapControl.Map); - - MapControl.Visible = true; - } - - private void HandleMapChanged(object sender, EventArgs e) - { - if (sender != MapControl) - return; - - _zoomExtentStack = new ZoomExtentStack(MapControl); - _zoomExtentStack.StoreExtents = true; - - _predefinedScales.Text = string.Format(NumberFormatInfo.CurrentInfo, "1:{0}", - Math.Round(MapControl.Map.GetMapScale(_dpiX), 0, MidpointRounding.AwayFromZero)); - MapControl.Map.MapViewOnChange += OnMapMapViewOnChange; - mvpLock = new MapViewportLock(MapControl.Map); - } - - private void HandleMapChanging(object sender, CancelEventArgs e) - { - if (sender != MapControl) - return; - _zoomExtentStack.Clear(); - - MapControl.Map.MapViewOnChange -= OnMapMapViewOnChange; - mvpLock = null; - - } - - void OnMapMapViewOnChange() - { - OnMapZoomChanged(MapControl.Map.Zoom); - } - - private void OnMapZoomChanged(double zoom) - { - if (MapControl == null) return; - - var scale = MapControl.Map.GetMapScale(_dpiX); - - //_zoomExtentStack.StoreExtents - - _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; - _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; - - if (InvokeRequired) - BeginInvoke((MethodInvoker) - delegate - { - _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; - _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; - _predefinedScales.Text = string.Format("1:{0}", - Math.Round(scale, 0, MidpointRounding.AwayFromZero)); - }); - else - { - _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; - _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; - _predefinedScales.Text = string.Format("1:{0}", Math.Round(scale, 0)); - } - } - - private void OnMapControlActiveToolChanged(MapBox.Tools tool) - { - if (MapControl == null) return; - switch (tool) - { - case MapBox.Tools.Pan: - _pan.Checked = true; - _zoomToWindow.Checked = false; - break; - case MapBox.Tools.ZoomWindow: - _pan.Checked = false; - _zoomToWindow.Checked = true; - break; - default: - _pan.Checked = false; - _zoomToWindow.Checked = false; - break; - } - } - - private void OnScaleEntered(object sender, System.Windows.Forms.KeyPressEventArgs e) - { - if (e.KeyChar == (char)13) - OnScaleSelected(sender, e); - } - - protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e) - { - base.OnPreviewKeyDown(e); - if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) - e.IsInputKey = true; - } - - private void OnScaleSelected(object sender, EventArgs e) - { - - if (MapControl == null) return; - - if (string.IsNullOrEmpty(_predefinedScales.Text)) - return; - - var text = _predefinedScales.Text; - if (!text.StartsWith("1:")) - text = "1:" + text; - - double val; - if (!double.TryParse(text.Substring(2), NumberStyles.Float, NumberFormatInfo.CurrentInfo, out val)) - return; - - //_predefinedScales.Text = text; - - MapControl.Map.MapScale = val; - MapControl.Refresh(); - - BeginInvoke(new MethodInvoker( - delegate - { - _predefinedScales.Text = string.Format("1:{0}", - Math.Round(MapControl.Map.GetMapScale(_dpiX), MidpointRounding.AwayFromZero)); - _predefinedScales.SelectionStart = 0; - _predefinedScales.SelectionLength = _predefinedScales.Text.Length; - })); - } - - private int _dpiX, _dpiY; - private ZoomExtentStack _zoomExtentStack; - - protected override void OnCreateControl() - { - using (var g = CreateGraphics()) - { - _dpiX = (int)g.DpiX; - _dpiY = (int)g.DpiY; - } - base.OnCreateControl(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Security.AccessControl; +using System.Windows.Forms; +using GeoAPI.Geometries; +using SharpMap.Properties; + +namespace SharpMap.Forms.ToolBar +{ + [DesignTimeVisible(true)] + public partial class MapZoomToolStrip : MapToolStrip + { + System.Windows.Forms.ToolStripButton _zoomToExtents; + System.Windows.Forms.ToolStripButton _fixedZoomIn; + System.Windows.Forms.ToolStripButton _fixedZoomOut; + System.Windows.Forms.ToolStripButton _zoomToWindow; + System.Windows.Forms.ToolStripButton _pan; + System.Windows.Forms.ToolStripButton _zoomPrev; + System.Windows.Forms.ToolStripButton _zoomNext; + System.Windows.Forms.ToolStripComboBox _predefinedScales; + System.Windows.Forms.ToolStripButton _minZoom; + System.Windows.Forms.ToolStripButton _maxZoom; + System.Windows.Forms.ToolStripButton _maxZoom2; + System.Windows.Forms.ToolStripButton _lock; + private System.Windows.Forms.ToolStripSeparator _sep1; + private System.Windows.Forms.ToolStripSeparator _sep2; + private System.Windows.Forms.ToolStripSeparator _sep3; + private System.Windows.Forms.ToolStripSeparator _sep4; + + /// + /// Creates an instance of this class + /// + public MapZoomToolStrip() + { + InitializeComponent(); + + AddScales(); + } + + /// + /// Creates an instance of this class + /// + public MapZoomToolStrip(IContainer container) + :base(container) + { + InitializeComponent(); + AddScales(); + } + + private void AddScales() + { + _predefinedScales.Items.AddRange(new object[] + { + "1:100", "1:250", "1:500", "1:1000", "1:2500", "1:5000", + "1:10000", "1:25000", "1:50000", "1:100000", "1:250000", + "1:500000", "1:1000000", "1:2500000", "1:5000000", "1:10000000" + }); + } + + public void InitializeComponent() + { + this._zoomToExtents = new System.Windows.Forms.ToolStripButton(); + this._fixedZoomIn = new System.Windows.Forms.ToolStripButton(); + this._fixedZoomOut = new System.Windows.Forms.ToolStripButton(); + this._sep1 = new System.Windows.Forms.ToolStripSeparator(); + this._zoomToWindow = new System.Windows.Forms.ToolStripButton(); + this._pan = new System.Windows.Forms.ToolStripButton(); + this._sep2 = new System.Windows.Forms.ToolStripSeparator(); + this._zoomPrev = new System.Windows.Forms.ToolStripButton(); + this._zoomNext = new System.Windows.Forms.ToolStripButton(); + this._sep3 = new System.Windows.Forms.ToolStripSeparator(); + this._predefinedScales = new System.Windows.Forms.ToolStripComboBox(); + this._sep4 = new System.Windows.Forms.ToolStripSeparator(); + this._minZoom = new System.Windows.Forms.ToolStripButton(); + this._maxZoom = new System.Windows.Forms.ToolStripButton(); + this._maxZoom2 = new System.Windows.Forms.ToolStripButton(); + this._lock = new System.Windows.Forms.ToolStripButton(); + this.SuspendLayout(); + // + // _zoomToExtents + // + this._zoomToExtents.Enabled = false; + this._zoomToExtents.Image = global::SharpMap.Properties.Resources.zoom_extent; + this._zoomToExtents.Name = "_zoomToExtents"; + this._zoomToExtents.Size = new System.Drawing.Size(23, 22); + this._zoomToExtents.ToolTipText = "Zoom to the map\'s extent"; + this._zoomToExtents.Click += this.OnFixedZoom; + // + // _fixedZoomIn + // + this._fixedZoomIn.Enabled = false; + this._fixedZoomIn.Image = global::SharpMap.Properties.Resources.zoom_in; + this._fixedZoomIn.Name = "_fixedZoomIn"; + this._fixedZoomIn.Size = new System.Drawing.Size(23, 22); + this._fixedZoomIn.ToolTipText = "Zoom into map"; + this._fixedZoomIn.Click += this.OnFixedZoom; + // + // _fixedZoomOut + // + this._fixedZoomOut.Enabled = false; + this._fixedZoomOut.Image = global::SharpMap.Properties.Resources.zoom_out; + this._fixedZoomOut.Name = "_fixedZoomOut"; + this._fixedZoomOut.Size = new System.Drawing.Size(23, 22); + this._fixedZoomOut.ToolTipText = "Zoom out of map"; + this._fixedZoomOut.Click += this.OnFixedZoom; + // + // _sep1 + // + this._sep1.Name = "_sep1"; + this._sep1.Size = new System.Drawing.Size(6, 6); + // + // _zoomToWindow + // + this._zoomToWindow.CheckOnClick = true; + this._zoomToWindow.Enabled = false; + this._zoomToWindow.Image = global::SharpMap.Properties.Resources.zoom_region; + this._zoomToWindow.Name = "_zoomToWindow"; + this._zoomToWindow.Size = new System.Drawing.Size(23, 20); + this._zoomToWindow.ToolTipText = "Specify viewport by mouse selection"; + this._zoomToWindow.CheckOnClick = true; + this._zoomToWindow.CheckedChanged += OnCheckedChanged; + // + // _pan + // + this._pan.CheckOnClick = true; + this._pan.Enabled = false; + this._pan.Image = global::SharpMap.Properties.Resources.pan; + this._pan.Name = "_pan"; + this._pan.Size = new System.Drawing.Size(23, 20); + this._pan.ToolTipText = "Drag the map\'s content around and scoll by mouse wheel"; + this._pan.CheckOnClick = true; + this._pan.CheckedChanged += OnCheckedChanged; + // + // _sep2 + // + this._sep2.Name = "_sep2"; + this._sep2.Size = new System.Drawing.Size(6, 6); + // + // _zoomPrev + // + this._zoomPrev.Enabled = false; + this._zoomPrev.Image = global::SharpMap.Properties.Resources.zoom_last; + this._zoomPrev.Name = "_zoomPrev"; + this._zoomPrev.Size = new System.Drawing.Size(23, 20); + this._zoomPrev.ToolTipText = "Zoom to previous viewport"; + this._zoomPrev.Click += (sender, args) => _zoomExtentStack.ZoomPrevious(); + // + // _zoomNext + // + this._zoomNext.Enabled = false; + this._zoomNext.Image = global::SharpMap.Properties.Resources.zoom_next; + this._zoomNext.Name = "_zoomNext"; + this._zoomNext.Size = new System.Drawing.Size(23, 20); + this._zoomNext.ToolTipText = "Restore last viewport"; + this._zoomNext.Click += (sender, args) => _zoomExtentStack.ZoomNext(); + // + // _sep3 + // + this._sep3.Name = "_sep3"; + this._sep3.Size = new System.Drawing.Size(6, 6); + // + // _predefinedScales + // + this._predefinedScales.Name = "_predefinedScales"; + this._predefinedScales.Size = new System.Drawing.Size(121, 23); + this._predefinedScales.SelectedIndexChanged += OnScaleSelected; + // + // _sep4 + // + this._sep4.Name = "_sep3"; + this._sep4.Size = new System.Drawing.Size(6, 6); + // + // _minZoom + // + this._minZoom.Enabled = false; + this._minZoom.Text = "min"; + this._minZoom.Name = "_minZoom"; + this._minZoom.Size = new System.Drawing.Size(23, 20); + this._minZoom.ToolTipText = "Set the minimum zoom level"; + this._minZoom.CheckOnClick = true; + this._minZoom.CheckedChanged += OnCheckedChanged; + // + // _maxZoom + // + this._maxZoom.Enabled = false; + this._maxZoom.Text = "max"; + this._maxZoom.Name = "_maxZoom"; + this._maxZoom.Size = new System.Drawing.Size(23, 20); + this._maxZoom.ToolTipText = "Set the maximum zoom level"; + this._maxZoom.CheckOnClick = true; + this._maxZoom.CheckedChanged += OnCheckedChanged; + // + // _maxZoom2 + // + this._maxZoom2.Enabled = false; + this._maxZoom2.Text = "max box"; + this._maxZoom2.Name = "_maxZoom2"; + this._maxZoom2.Size = new System.Drawing.Size(23, 20); + this._maxZoom2.ToolTipText = "Set the maximum zoom window"; + this._maxZoom2.CheckOnClick = true; + this._maxZoom2.CheckedChanged += OnCheckedChanged; + // + // _lock + // + this._lock.Enabled = false; + this._lock.Name = "_lock"; + this._lock.Size = new System.Drawing.Size(23, 20); + this._lock.ToolTipText = "Lock the viewport"; + this._lock.CheckOnClick = true; + this._lock.Image = global::SharpMap.Properties.Resources.unlocked; + this._lock.CheckedChanged += OnCheckedChanged; + // + // MapZoomToolStrip + // + this.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this._zoomToExtents, + this._fixedZoomIn, + this._fixedZoomOut, + this._sep1, + this._zoomToWindow, + this._pan, + this._sep2, + this._zoomPrev, + this._zoomNext, + this._sep3, + this._predefinedScales, + this._sep4, + this._minZoom, + this._maxZoom, + this._lock, + }); + this.Text = "MapZoomToolStrip"; + this.ResumeLayout(false); + + } + + + private void OnFixedZoom(object sender, EventArgs e) + { + if (MapControl == null) return; + + if (sender == _zoomToExtents) + { + MapControl.Map.ZoomToExtents(); + } + else if (sender == _zoomPrev) + { + _zoomExtentStack.ZoomPrevious(); + } + else if (sender == _zoomNext) + { + _zoomExtentStack.ZoomNext(); + } + else + { + var scale = sender == _fixedZoomIn ? 1d / 1.2d : 1.2d; + MapControl.Map.Zoom *= scale; + } + MapControl.Refresh(); + } + + #region ZoomExtentStack + + /// + /// An implementation of zoom previous/zoom next like *** MapControl + /// + [Serializable] + public class ZoomExtentStack + { + private readonly MapBox _mapBox; + private readonly List _zoomExtentStack = new List(); + private bool _blockStoringWhenPanning; + + /// + /// Value indicating if zoom changes that have been invoked by user interaction should be saved or not + /// + + private bool _storeExtentsUser; + /// + /// Value indicating if zoom changes that have been invoked by this class should be stored or not + /// + private bool _storeExtentsInternal; + + private int _index; + private bool _isPanning; + private int _skip = 0; + + /// + /// Initialisation; no extents will be stored until .StoreExtents = true + /// + /// mapbox control + public ZoomExtentStack(MapBox mapBox) + { + _mapBox = mapBox; + _mapBox.Map.MapViewOnChange += HandleMapMapViewOnChange; + _mapBox.MouseDown += HandleMapBoxMouseDown; + _mapBox.MouseUp += HandleMapBoxMouseUp; + _mapBox.MouseWheel += HandleMouseWheel; + } + + private void HandleMouseWheel(object sender, MouseEventArgs e) + { + // Is the map box going to keep the position under the cursor + // untouched? + if (_mapBox.ZoomToPointer) + { + /* + * For the computation of the new zoom and center, the + * Map.Center is moved, Map.Zoom is changed and Map.Center + * then reset. We only want the last viewport, this we're + * going to skip the next two zoom changes. + */ + _skip = 2; + } + } + + private void HandleMapBoxMouseDown(Coordinate worldPos, MouseEventArgs imagePos) + { + if (_mapBox.ActiveTool == MapBox.Tools.Pan) + { + //_blockStoringWhenPanning = false; + _isPanning = true; + Add(_mapBox.Map.Envelope); + } + } + + private void HandleMapBoxMouseUp(Coordinate worldPos, MouseEventArgs imagePos) + { + if (_mapBox.ActiveTool == MapBox.Tools.Pan) + { + //_blockStoringWhenPanning = true; + _isPanning = false; + } + } + + private void HandleMapMapViewOnChange() + { + + if (_storeExtentsUser && _storeExtentsInternal /*&& (!_blockStoringWhenPanning)*/) + { + if (_isPanning) + _zoomExtentStack[_index] = _mapBox.Map.Envelope; + else + Add(_mapBox.Map.Envelope); + } + else + _storeExtentsInternal = true; + } + + /// + /// If true extents will be stored, starting with the current; + /// if false no extents will be stored (paused). + /// + public bool StoreExtents + { + get { return _storeExtentsUser; } + set + { + if (value) Add(_mapBox.Map.Envelope); + _storeExtentsUser = value; + } + } + + /// + /// Erases the extents stack + /// + public void Clear() + { + _zoomExtentStack.Clear(); + _index = 0; + } + + /// + /// true if previous zoom is available + /// + public bool CanZoomPrevious + { + get { return (_index > 0); } + } + + /// + /// true if 'next' zoom is available + /// + public bool CanZoomNext + { + get { return (_index < _zoomExtentStack.Count - 1); } + } + + /// + /// Execute a zoom previous + /// + public void ZoomPrevious() + { + if (CanZoomPrevious) + { + _storeExtentsInternal = false; + _index--; + _mapBox.Map.ZoomToBox(_zoomExtentStack[_index]); + _mapBox.Refresh(); + } + } + + /// + /// Execute a zoom next + /// + public void ZoomNext() + { + if (CanZoomNext) + { + _storeExtentsInternal = false; + _index++; + _mapBox.Map.ZoomToBox(_zoomExtentStack[_index]); + _mapBox.Refresh(); + } + } + + /// + /// Adds the given extent to the stack + /// + /// the extent to be stored + private void Add(Envelope newExtent) + { + // remove all above index + if (_zoomExtentStack.Count - 1 > _index) + _zoomExtentStack.RemoveRange(_index + 1, _zoomExtentStack.Count - _index - 1); + // add given extent + _zoomExtentStack.Add(newExtent); + // correct index + if (_skip == 0) + _index = _zoomExtentStack.Count - 1; + else + _skip--; + } + } + + #endregion + + private void OnCheckedChanged(object sender, EventArgs e) + { + if (MapControl == null) return; + + var tsb = (System.Windows.Forms.ToolStripButton)sender; + + if (tsb == _pan) + TrySetActiveTool(tsb, MapBox.Tools.Pan); + + if (tsb == _zoomToWindow) + TrySetActiveTool(tsb, MapBox.Tools.ZoomWindow); + + if (tsb == _minZoom) + { + MapControl.Map.MinimumZoom = + _minZoom.Checked ? MapControl.Map.Zoom : Double.Epsilon; + } + + if (tsb == _maxZoom) + { + MapControl.Map.MaximumZoom = + _maxZoom.Checked ? MapControl.Map.Zoom : Double.MaxValue; + } + + if (tsb == _lock) + { + if (_lock.Checked) + { + mvpLock.Lock(); + tsb.Image = global::SharpMap.Properties.Resources.locked; + } + else + { + mvpLock.Unlock(); + tsb.Image = global::SharpMap.Properties.Resources.unlocked; + } + + } + } + + private MapViewportLock mvpLock; + + private void ResetControls() + { + Visible = true; + + if (MapControl.Map != null) + { + _minZoom.Checked = MapControl.Map.MinimumZoom > Double.Epsilon; + _maxZoom.Checked = MapControl.Map.MaximumZoom < Double.MaxValue; + _maxZoom2.Checked = MapControl.Map.MaximumExtents != null; + } + + _zoomExtentStack = new ZoomExtentStack(MapControl); + _zoomExtentStack.StoreExtents = true; + + mvpLock = new MapViewportLock(MapControl.Map); + } + + protected override void OnMapControlChangedInternal(EventArgs e) + { + if (MapControl == null) + return; + + //MapControl.MapZoomChanged += OnMapZoomChanged; + MapControl.MapChanging += HandleMapChanging; + MapControl.MapChanged += HandleMapChanged; + MapControl.Map.MapViewOnChange += OnMapMapViewOnChange; + MapControl.ActiveToolChanged += OnMapControlActiveToolChanged; + + + _fixedZoomIn.Enabled = + _fixedZoomOut.Enabled = + _zoomToExtents.Enabled = + _pan.Enabled = + _zoomToWindow.Enabled = + _minZoom.Enabled = + _maxZoom.Enabled = + _maxZoom2.Enabled = + _lock.Enabled = + /*_predefinedScales.Enabled =*/ + MapControl.Map != null; + + Visible = true; + + ResetControls(); + + MapControl.Visible = true; + } + + private void HandleMapChanged(object sender, EventArgs e) + { + if (sender != MapControl) + return; + + ResetControls(); + + _predefinedScales.Text = string.Format(NumberFormatInfo.CurrentInfo, "1:{0}", + Math.Round(MapControl.Map.GetMapScale(_dpiX), 0, MidpointRounding.AwayFromZero)); + + MapControl.Map.MapViewOnChange += OnMapMapViewOnChange; + } + + private void HandleMapChanging(object sender, CancelEventArgs e) + { + if (sender != MapControl) + return; + _zoomExtentStack.Clear(); + + MapControl.Map.MapViewOnChange -= OnMapMapViewOnChange; + mvpLock = null; + + } + + void OnMapMapViewOnChange() + { + OnMapZoomChanged(MapControl.Map.Zoom); + } + + private void OnMapZoomChanged(double zoom) + { + if (MapControl == null) return; + + var scale = MapControl.Map.GetMapScale(_dpiX); + + //_zoomExtentStack.StoreExtents + + _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; + _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; + + if (InvokeRequired) + BeginInvoke((MethodInvoker) + delegate + { + _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; + _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; + _predefinedScales.Text = string.Format("1:{0}", + Math.Round(scale, 0, MidpointRounding.AwayFromZero)); + }); + else + { + _zoomPrev.Enabled = _zoomExtentStack.CanZoomPrevious; + _zoomNext.Enabled = _zoomExtentStack.CanZoomNext; + _predefinedScales.Text = string.Format("1:{0}", Math.Round(scale, 0)); + } + } + + private void OnMapControlActiveToolChanged(MapBox.Tools tool) + { + if (MapControl == null) return; + switch (tool) + { + case MapBox.Tools.Pan: + _pan.Checked = true; + _zoomToWindow.Checked = false; + break; + case MapBox.Tools.ZoomWindow: + _pan.Checked = false; + _zoomToWindow.Checked = true; + break; + default: + _pan.Checked = false; + _zoomToWindow.Checked = false; + break; + } + } + + private void OnScaleEntered(object sender, System.Windows.Forms.KeyPressEventArgs e) + { + if (e.KeyChar == (char)13) + OnScaleSelected(sender, e); + } + + protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e) + { + base.OnPreviewKeyDown(e); + if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) + e.IsInputKey = true; + } + + private void OnScaleSelected(object sender, EventArgs e) + { + + if (MapControl == null) return; + + if (string.IsNullOrEmpty(_predefinedScales.Text)) + return; + + var text = _predefinedScales.Text; + if (!text.StartsWith("1:")) + text = "1:" + text; + + double val; + if (!double.TryParse(text.Substring(2), NumberStyles.Float, NumberFormatInfo.CurrentInfo, out val)) + return; + + //_predefinedScales.Text = text; + + MapControl.Map.MapScale = val; + MapControl.Refresh(); + + BeginInvoke(new MethodInvoker( + delegate + { + _predefinedScales.Text = string.Format("1:{0}", + Math.Round(MapControl.Map.GetMapScale(_dpiX), MidpointRounding.AwayFromZero)); + _predefinedScales.SelectionStart = 0; + _predefinedScales.SelectionLength = _predefinedScales.Text.Length; + })); + } + + private int _dpiX, _dpiY; + private ZoomExtentStack _zoomExtentStack; + + protected override void OnCreateControl() + { + using (var g = CreateGraphics()) + { + _dpiX = (int)g.DpiX; + _dpiY = (int)g.DpiY; + } + base.OnCreateControl(); + } + } +} From 45776b1fe3e8d49ff83f9b541a9c04d9f01d7c98 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 13 Jul 2019 16:00:03 +0700 Subject: [PATCH 092/186] MapTransform unit tests and bench-marking --- UnitTests/MapTest.cs | 585 +++++++++++++++++++++++++++++++++---------- 1 file changed, 455 insertions(+), 130 deletions(-) diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index c1c5f556..3956c3c3 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -1,17 +1,25 @@ using System; using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Drawing.Imaging; +using System.Linq; using System.Reactive.Linq; using GeoAPI.Geometries; using Moq; using NUnit.Framework; using NetTopologySuite.Geometries; +using NetTopologySuite.Geometries.Utilities; using NetTopologySuite.IO; +using NetTopologySuite.Operation.Polygonize; +using NUnit.Framework.Constraints; using SharpMap; using SharpMap.Data.Providers; using Geometry = GeoAPI.Geometries.IGeometry; using SharpMap.Layers; +using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Decoration.ScaleBar; using Point = GeoAPI.Geometries.Coordinate; using BoundingBox = GeoAPI.Geometries.Envelope; @@ -279,64 +287,300 @@ public void ImageToWorld_DefaultMap_ReturnValue() Assert.AreEqual(new Point(8, 50), p); } - [Test, Category("RequiresWindows")] - public void ImageToWorld_Rotations() - { - // Test applying map transform at 30 degree increments, comparing Image>>World calcs - // with independent Affine Transformation, map Envelope checks, and generate image - ImageToWorld_Rotation(0); - ImageToWorld_Rotation(30); - ImageToWorld_Rotation(60); - ImageToWorld_Rotation(90); - ImageToWorld_Rotation(120); - ImageToWorld_Rotation(150); - ImageToWorld_Rotation(180); - ImageToWorld_Rotation(210); - ImageToWorld_Rotation(240); - ImageToWorld_Rotation(270); - ImageToWorld_Rotation(300); - ImageToWorld_Rotation(330); - //ImageToWorld_Rotation(360); - - ImageToWorld_Rotation(0); - ImageToWorld_Rotation(-30); - ImageToWorld_Rotation(-60); - ImageToWorld_Rotation(-90); - ImageToWorld_Rotation(-120); - ImageToWorld_Rotation(-150); - ImageToWorld_Rotation(-180); - ImageToWorld_Rotation(-210); - ImageToWorld_Rotation(-240); - ImageToWorld_Rotation(-270); - ImageToWorld_Rotation(-300); - ImageToWorld_Rotation(-330); - //ImageToWorld_Rotation(-360); - } - - private void ImageToWorld_Rotation(float deg) - { - var map = new Map(new Size(1000, 500)) { BackColor = System.Drawing.Color.LightSkyBlue }; + [Ignore("Benchmarking MapTransform in Map and MapViewport with(new) and without(old) Coordinate arrays")] + [TestCase("roads_ugl.shp", 0)] + [TestCase("roads_ugl.shp", 45)] + [TestCase("SPATIAL_F_SKARVMUFF.shp", 0)] + [TestCase("SPATIAL_F_SKARVMUFF.shp", 45)] + public void WorldToImageTransform_Benchmark(string shapeFileName, float mapTransformRotation) + { + // previous World >> Image transform calculations were for each individual coordinate in an array + // new method transforms entire array (eg linestring, polygon ring, multipoint). + // When there is no map rotation, a simplified calculation is used. When map is rotated, an affine transformation is used + // (one affine transformation object instantiated per array, previously one affine transformation per coordinate). + + // Hypothesis: There should be minimal change for point layers, but significant improvements for geometries with ILineString and IMultiPoint + + // New methods typically much faster as shown below from several tests: + // roads_ugl: 3361 polylines (avg 52 vertices per feature) + // Rotn OBJ OLD (avg) NEW (avg) Improvement + // 0deg mAp 160 25 5x faster + // 0deg mVp 300 20 15x faster + // 45deg mAp 1500 20 75x faster - woo hoo! + // 45deg mVp 2000 10 200x faster - woo hoo squared! + // + // SKARVMUFF: 4342 Points + // Rotn OBJ OLD (avg) NEW (avg) Improvement + // 0deg mAp 3 3 no discernible change + // 0deg mVp 6 2 3x faster + // 45deg mAp 25 10 2.5x faster + // 45deg mVp 45 2 20x faster + + var map = new Map(new Size(1024, 1024)) {BackColor = System.Drawing.Color.LightSkyBlue}; + + if (!mapTransformRotation.Equals(0f)) + { + System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); + mapTransform.RotateAt(mapTransformRotation, new PointF(map.Size.Width * 0.5f, map.Size.Height * 0.5f)); + map.MapTransform = mapTransform; + } + + var fn = System.IO.Path.Combine("TestData", shapeFileName); + var prov = new SharpMap.Data.Providers.ShapeFile(fn, true); + + var vl = new VectorLayer(shapeFileName, prov); + map.Layers.Add(vl); + map.ZoomToExtents(); + + var geoms = prov.GetGeometriesInView(map.Envelope); + var sw = new System.Diagnostics.Stopwatch(); + + var oldTimesMap = new System.Collections.Generic.List(); + var newTimesMap = new System.Collections.Generic.List(); + + var oldTimesMvp = new System.Collections.Generic.List(); + var newTimesMvp = new System.Collections.Generic.List(); + + var numTests = 20; + + // MAP tests + for (var i = 0; i < numTests; i++) + { + // old + sw.Reset(); + sw.Start(); + foreach (var geom in geoms) + { + foreach (var p in geom.Coordinates) + { + var pt = SharpMap.Utilities.Transform.WorldToMap(p, map); + if (!map.MapTransformRotation.Equals(0f)) + { + using (var transform = map.MapTransform) + { + var pts = new[] {pt}; + transform.TransformPoints(pts); + pt = pts[0]; + } + } + } + } + sw.Stop(); + oldTimesMap.Add(sw.ElapsedMilliseconds); + + // new + sw.Reset(); + sw.Start(); + foreach (var geom in geoms) + { + if (geom.Coordinates.Length == 0) + { + var pt = map.WorldToImage(geom.Coordinates[0], true); + } + else + { + var pts = map.WorldToImage(geom.Coordinates, true); + } + } + sw.Stop(); + newTimesMap.Add(sw.ElapsedMilliseconds); + } + + // drop slowest 2 / fastest 2 + oldTimesMap.Sort(); + newTimesMap.Sort(); + + var oldTimesAvgMap = oldTimesMap.Skip(2).Take(16).Average(); + var newTimesAvgMap = newTimesMap.Skip(2).Take(16).Average(); + + Trace.WriteLine($"WorldToImageTransform_Benchmark {shapeFileName} {mapTransformRotation:000}deg MAP old: {oldTimesAvgMap} MAP new: {newTimesAvgMap}"); + // allow a little bit of leeway + Assert.LessOrEqual(newTimesAvgMap / oldTimesAvgMap,1.2,$"{shapeFileName}_{mapTransformRotation}deg_MAP" ); + + // MapViewport Tests + var mvp = (MapViewport) map; + for (var i = 0; i < numTests; i++) + { + // old + sw.Reset(); + sw.Start(); + foreach (var geom in geoms) + { + foreach (var p in geom.Coordinates) + { + var pt = mvp.WorldToImageOld(p, true); + if (!mvp.MapTransformRotation.Equals(0f)) + { + using (var transform = mvp.MapTransform) + { + var pts = new[] {pt}; + transform.TransformPoints(pts); + pt = pts[0]; + } + } + } + } + sw.Stop(); + oldTimesMvp.Add(sw.ElapsedMilliseconds); + + // new + sw.Reset(); + sw.Start(); + foreach (var geom in geoms) + { + if (geom.Coordinates.Length == 0) + { + var pt = mvp.WorldToImage(geom.Coordinates[0], true); + } + else + { + var pts = mvp.WorldToImage(geom.Coordinates, true); + } + } + + sw.Stop(); + newTimesMvp.Add(sw.ElapsedMilliseconds); + } + + oldTimesMvp.Sort(); + newTimesMvp.Sort(); + + var oldTimesAvgMvp = oldTimesMvp.Skip(2).Take(16).Average(); + var newTimesAvgMvp = newTimesMvp.Skip(2).Take(16).Average(); + + + Trace.WriteLine($"WorldToImageTransform_Benchmark {shapeFileName} {mapTransformRotation:000}deg MVP old: {oldTimesAvgMvp} MVP new: {newTimesAvgMvp}"); + // allow a little bit of leeway + Assert.LessOrEqual(newTimesAvgMvp/ oldTimesAvgMvp,1.2, $"{shapeFileName}_{mapTransformRotation}deg_MVP" ); + + map.Dispose(); + } + + [TestCase(0), Category("RequiresWindows")] + [TestCase(30), Category("RequiresWindows")] + [TestCase(60), Category("RequiresWindows")] + [TestCase(90), Category("RequiresWindows")] + [TestCase(120), Category("RequiresWindows")] + [TestCase(150), Category("RequiresWindows")] + [TestCase(180), Category("RequiresWindows")] + [TestCase(210), Category("RequiresWindows")] + [TestCase(240), Category("RequiresWindows")] + [TestCase(270), Category("RequiresWindows")] + [TestCase(300), Category("RequiresWindows")] + [TestCase(330), Category("RequiresWindows")] + public void ImageToWorld_AndBack_Map_WithRotation(float rotationDeg) + { + using (var map = ConfigureTransformMap(rotationDeg)) + { + var imagePts = GetImageCoordinates(map); + var worldPts = GetWorldCoordinates(map, imagePts); + // Test map transform, comparing Image>>World calcs with independent + // Affine Transformation of image/world geometry and map properties + ValidateTransformScenarios(false, map, imagePts, worldPts.Coordinates); + } + } + + [TestCase(0), Category("RequiresWindows")] + [TestCase(30), Category("RequiresWindows")] + [TestCase(60), Category("RequiresWindows")] + [TestCase(90), Category("RequiresWindows")] + [TestCase(120), Category("RequiresWindows")] + [TestCase(150), Category("RequiresWindows")] + [TestCase(180), Category("RequiresWindows")] + [TestCase(210), Category("RequiresWindows")] + [TestCase(240), Category("RequiresWindows")] + [TestCase(270), Category("RequiresWindows")] + [TestCase(300), Category("RequiresWindows")] + [TestCase(330), Category("RequiresWindows")] + public void ImageToWorld_AndBack_MapViewport_WithRotation(float rotationDeg) + { + // Similar to ImageToWorld_AndBack_Map_WithRotation but testing MapViewport and generating test images + var map = ConfigureTransformMap(rotationDeg); + map.Decorations.Add(new ScaleBar()); + map.Decorations.Add(new NorthArrow(){ForeColor = Color.Red}); + map.Decorations.Add(new EyeOfSight(){Anchor = MapDecorationAnchor.RightTop, ForeColor = Color.DarkBlue}); + var imagePts = GetImageCoordinates(map); + var worldPts = GetWorldCoordinates(map, imagePts); + ValidateTransformScenarios(true, map, imagePts, worldPts.Coordinates); + + // visual checks + var vl = new VectorLayer("Test Viewport Outline"); + var gp = new GeometryProvider(worldPts); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(map.Center)); + vl.DataSource = gp; + + map.Layers.Add(vl); + + // Polygon should always appear aligned with borders, with red dot should always be in lower left corner. + // note buffer giving small margin around borders to be sure polygon isn't grossly larger than mapviewport. + var polygon = GetMapExtentPolygon(map.Center, map.Zoom,map.MapHeight,map.MapTransformRotation).Buffer(-50); + vl = new VectorLayer("Test Viewport Inset"); + gp = new GeometryProvider(polygon); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(map.Center)); + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(polygon.Coordinates[0])); + vl.DataSource = gp; + map.Layers.Add(vl); + + string fn = $"MapRotation_{rotationDeg:000}.png"; + using (var img = map.GetMap(96)) + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn),System.Drawing.Imaging.ImageFormat.Png); + + map.Dispose(); + } + + private Map ConfigureTransformMap(float rotationDeg) + { + var map = new Map(new Size(600, 300)) {BackColor = System.Drawing.Color.LightSkyBlue}; map.Zoom = 1000; map.Center = new Point(25000, 75000); - double mapScale = map.GetMapScale(96); - - double scaleX = 1; - double scaleY = 1; + var mapScale = map.MapScale; System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); - mapTransform.RotateAt(deg, new PointF(map.Size.Width / 2f, map.Size.Height / 2f)); + mapTransform.RotateAt(rotationDeg, new PointF(map.Size.Width * 0.5f, map.Size.Height * 0.5f)); map.MapTransform = mapTransform; - var env = map.Envelope; + return map; + } + + private PointF[] GetImageCoordinates(Map map) + { + return new PointF[] + { + new PointF((float) (map.Size.Width * 0.5),(float) (map.Size.Height * 0.5)), // centre + new PointF(0, 0), // UL + new PointF(map.Size.Width, 0), // UR + new PointF(map.Size.Width, map.Size.Height), // LR + new PointF(0, map.Size.Height) // LL + }; + } + private LineString GetWorldCoordinates(Map map, PointF[] imagePts) + { + var affineTrans = GetIndependentTransform(map); + // LineString equivalent of imagePts + var geom = new LineString((Coordinate[])Array.ConvertAll(imagePts , p => new Coordinate(p.X, p.Y))); + // independent transform to World coordinates +// NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString( +// new GeometryFactory(new PrecisionModel()), geom, affineTrans); + geom = (LineString)affineTrans.Transform(geom); + geom.GeometryChangedAction(); + return geom; + } + + //private ProjNet.CoordinateSystems.Transformations.AffineTransform GetIndependentTransform(Map map) + private AffineTransformation GetIndependentTransform(Map map) + { + double scaleX = map.Zoom / map.Size.Width; + double scaleY = map.MapHeight / map.Size.Height; + // Affine Transformation: // 1: Translate to mapViewPort centre // 2: Reflect in X-Axis // 3: Rotation about mapViewPort centre // 4: Scale to map units // 5: Translate to map centre - - //CLOCKWISE affine transform (negate degrees) + + //CLOCKWISE ProjNet affine transform (negate degrees) //double rad = -1 * deg * Math.PI / 180.0; //GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = // new ProjNet.CoordinateSystems.Transformations.AffineTransform( @@ -347,84 +591,140 @@ private void ImageToWorld_Rotation(float deg) // -scaleY * Math.Cos(rad), // scaleY * Math.Sin(rad) * map.Size.Width / 2f + scaleY * Math.Cos(rad) * map.Size.Height / 2f + map.Center.Y); - //ANTICLCOCKWISE affine transform - double rad = deg * Math.PI / 180.0; - GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = - new ProjNet.CoordinateSystems.Transformations.AffineTransform( - scaleX * Math.Cos(rad), - scaleX * Math.Sin(rad), - -scaleX * Math.Cos(rad) * map.Size.Width / 2d - scaleX * Math.Sin(rad) * map.Size.Height / 2d + map.Center.X, - scaleY * Math.Sin(rad), - -scaleY * Math.Cos(rad), - -scaleY * Math.Sin(rad) * map.Size.Width / 2d + scaleY * Math.Cos(rad) * map.Size.Height / 2d + map.Center.Y); - - // image coordindates - var pts = new[] { new Point(map.Size.Width / 2f, map.Size.Height / 2f), // centre - new Point(0, 0), // UL - new Point(map.Size.Width, 0), // UR - new Point(map.Size.Width, map.Size.Height), // LR - new Point(0, map.Size.Height), // LL - new Point(map.Size.Width * 0.05, map.Size.Height * 0.95), // LL inset 5% - new Point(map.Size.Width * 0.95, map.Size.Height * 0.95), // LR inset 5% - new Point(map.Size.Width * 0.95, map.Size.Height * 0.05), // UR inset 5% - new Point(map.Size.Width * 0.05, map.Size.Height * 0.05) // UL inset 5% - }; - - LineString lineString = new LineString(pts); - - NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString(new GeometryFactory(new PrecisionModel()), lineString, trans); + //ANTICLCOCKWISE ProjNet affine transform + double rad = map.MapTransformRotation * Math.PI / 180.0; +// var trans = +// new ProjNet.CoordinateSystems.Transformations.AffineTransform( +// scaleX * Math.Cos(rad), +// scaleX * Math.Sin(rad), +// -scaleX * Math.Cos(rad) * map.Size.Width * 0.5 - scaleX * Math.Sin(rad) * map.Size.Height * 0.5 + map.Center.X, +// scaleY * Math.Sin(rad), +// -scaleY * Math.Cos(rad), +// -scaleY * Math.Sin(rad) * map.Size.Width * 0.5 + scaleY * Math.Cos(rad) * map.Size.Height * 0.5 + map.Center.Y); +// +// return trans; + + var trans = new AffineTransformation(); + trans.Compose(AffineTransformation.TranslationInstance(-map.Size.Width * 0.5, -map.Size.Height * 0.5)); + trans.Compose(AffineTransformation.ScaleInstance(1, -1)); + trans.Compose(AffineTransformation.RotationInstance(rad)); + trans.Compose(AffineTransformation.ScaleInstance(scaleX, scaleY)); + trans.Compose(AffineTransformation.TranslationInstance(map.Center.X, map.Center.Y)); + return trans; // .Net Matrix - //System.Drawing.Drawing2D.Matrix matrix; + //System.Drawing.Drawing2D.Matrix matrix; //matrix = new System.Drawing.Drawing2D.Matrix(); //matrix.Translate(-map.Size.Width / 2f, -map.Size.Height / 2f); // shift origin to viewport centre //matrix.Scale(1, -1, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis //matrix.Rotate(deg, System.Drawing.Drawing2D.MatrixOrder.Append); // rotate about viewport centre //matrix.Scale((float)scaleX, (float)scaleY, System.Drawing.Drawing2D.MatrixOrder.Append); // scale //matrix.Translate((float)map.Center.X, (float)map.Center.Y, System.Drawing.Drawing2D.MatrixOrder.Append); // translate to map centre + } - //var ptsF = new[] { new PointF(map.Size.Width / 2f, map.Size.Height / 2f), // centre - // new PointF(0, 0), // UL - // new PointF(map.Size.Width, 0), // UR - // new PointF(map.Size.Width, map.Size.Height), // LR - // new PointF(0, map.Size.Height) }; // LL + private Polygon GetMapExtentPolygon(Coordinate mapCenter, double zoom, double mapHeight, float rotationDeg) + { + // height has been adjusted for pixelRatio +// var height = map.MapHeight; +// if (double.IsNaN(height) || double.IsInfinity(height) || map.Size.Width == 0 || map.Size.Height == 0) +// return null; + + var poly = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(mapCenter.X - zoom * .5,mapCenter.Y - mapHeight * .5), + new Coordinate(mapCenter.X - zoom * .5,mapCenter.Y + mapHeight * .5), + new Coordinate(mapCenter.X + zoom * .5,mapCenter.Y + mapHeight * .5), + new Coordinate(mapCenter.X + zoom * .5,mapCenter.Y - mapHeight * .5), + new Coordinate(mapCenter.X -zoom * .5,mapCenter.Y - mapHeight * .5) + } + )); + + if (rotationDeg.Equals(0f)) + return poly; + + var rad = rotationDeg * Math.PI / 180.0; + var at = AffineTransformation.RotationInstance(rad, mapCenter.X, mapCenter.Y); + return (Polygon)at.Transform(poly); + } - //matrix.TransformPoints(ptsF); + private void ValidateTransformScenarios( bool useMapViewport, Map map, PointF[] ptsImage, Coordinate[] controlGeom) + { + Coordinate[] ptsWorld; + Envelope worldEnv; + Polygon worldPolygon; + PointF[] andBack; + string mode; + + var controlEnv = new Envelope( + controlGeom.Min(c => c.X), + controlGeom.Max(c => c.X), + controlGeom.Min(c => c.Y), + controlGeom.Max(c => c.Y)); + + var mvp = (MapViewport) map; + + if (!useMapViewport) + { + mode = "map"; + ptsWorld = map.ImageToWorld((PointF[]) ptsImage.Clone(), true); + worldEnv = map.Envelope; + worldPolygon = GetMapExtentPolygon(map.Center, map.Zoom,map.MapHeight,map.MapTransformRotation); + andBack = map.WorldToImage(ptsWorld, true); + } + else + { + mode = "mvp"; + ptsWorld= mvp.ImageToWorld((PointF[]) ptsImage.Clone(), true); + worldEnv = mvp.Envelope; + worldPolygon = GetMapExtentPolygon(mvp.Center, mvp.Zoom,mvp.MapHeight,mvp.MapTransformRotation);; + andBack = mvp.WorldToImage(ptsWorld, true); + } - // validate ImageToWorld calcs with independent affine transformation - Assert.IsTrue(lineString.GetPointN(0).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width / 2f, map.Size.Height / 2f), true), 0.001), "Centre: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(1).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, 0), true), 0.001), "Upper Left: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(2).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, 0), true), 0.001), "Upper Right: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(3).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height), true), 0.001), "Lower Right: " + deg + " deg"); - Assert.IsTrue(lineString.GetPointN(4).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, map.Size.Height), true), 0.001), "Lower Left: " + deg + " deg"); + // validate ImageToWorld calcs by comparison with control geom (independent affine transformation) + Assert.IsTrue(controlGeom[0].Equals2D(ptsWorld[0], 0.001), $"{mode}Image2World Centre"); + Assert.IsTrue(controlGeom[1].Equals2D(ptsWorld[1], 0.001), $"{mode}Image2World TopLeft"); + Assert.IsTrue(controlGeom[2].Equals2D(ptsWorld[2], 0.001), $"{mode}Image2World TopRight"); + Assert.IsTrue(controlGeom[3].Equals2D(ptsWorld[3], 0.001), $"{mode}Image2World BottomRight"); + Assert.IsTrue(controlGeom[4].Equals2D(ptsWorld[4], 0.001), $"{mode}Image2World BottomLeft"); // validate map envelope: lineString outline = image extents, so lineString.EnvelopeInternal should equal map.Envelope - // this test found long-standing bug in Map.Envelope calcs - Assert.IsTrue(env.BottomLeft().Equals2D(lineString.EnvelopeInternal.BottomLeft(), 0.1)); - Assert.IsTrue(env.TopLeft().Equals2D(lineString.EnvelopeInternal.TopLeft(), 0.1)); - Assert.IsTrue(env.TopRight().Equals2D(lineString.EnvelopeInternal.TopRight(), 0.1)); - Assert.IsTrue(env.BottomRight().Equals2D(lineString.EnvelopeInternal.BottomRight(), 0.1)); - - // visual checks - var vl = new VectorLayer("Test Points"); - var gp = new GeometryProvider(lineString); - gp.Geometries.Add(new NetTopologySuite.Geometries.Point(25000, 75000)); - vl.DataSource = gp; - var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer(); - cps.CharacterIndex = 221; - cps.Font = new Font("Wingdings", 30); - vl.Style.PointSymbolizer = cps; - map.Layers.Add(vl); - - map.ZoomToBox(lineString.EnvelopeInternal); - - string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.png"; - using (var img = map.GetMap(96)) - img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn),System.Drawing.Imaging.ImageFormat.Png); + // this test found and resolved long-standing problem in Map.Envelope calcs when MapTransform is applied + Assert.IsTrue(worldEnv.BottomLeft().Equals2D(controlEnv.BottomLeft(), 0.1), $"{mode}Envelope BottomLeft"); + Assert.IsTrue(worldEnv.TopLeft().Equals2D(controlEnv.TopLeft(), 0.1), $"{mode}Envelope TopLeft"); + Assert.IsTrue(worldEnv.TopRight().Equals2D(controlEnv.TopRight(), 0.1), $"{mode}Envelope TopRight"); + Assert.IsTrue(worldEnv.BottomRight().Equals2D(controlEnv.BottomRight(), 0.1), $"{mode}Envelope BottomRight"); + + // validate map polygon + Assert.IsTrue(worldPolygon.EnvelopeInternal.BottomLeft().Equals2D(controlEnv.BottomLeft(), 0.1), $"{mode}Polygon BottomLeft"); + Assert.IsTrue(worldPolygon.EnvelopeInternal.TopLeft().Equals2D(controlEnv.TopLeft(), 0.1), $"{mode}Polygon BottomLeft"); + Assert.IsTrue(worldPolygon.EnvelopeInternal.TopRight().Equals2D(controlEnv.TopRight(), 0.1), $"{mode}Polygon BottomLeft"); + Assert.IsTrue(worldPolygon.EnvelopeInternal.BottomRight().Equals2D(controlEnv.BottomRight(), 0.1), $"{mode}Polygon BottomLeft"); + + // validate zoom + map.Zoom = 1000; + Assert.AreEqual(map.Zoom, mvp.Zoom, 0.001, $"{mode}MapZoom"); + + Assert.AreEqual(map.Zoom, worldPolygon.Coordinates[1].Distance(worldPolygon.Coordinates[2]), 0.1, $"{mode}PolygonWidth"); + + // validate MapScale + Assert.AreEqual(map.MapScale, mvp.GetMapScale(96), 0.1, $"{mode}MapScale"); + + // now convert WORLD >> IMAGE + //var andBack = map.WorldToImage(ptsWorld, true); + + Assert.AreEqual(ptsImage[0].X,andBack[0].X, 0.02, $"{mode}World2Image Centre X"); + Assert.AreEqual(ptsImage[0].Y,andBack[0].Y, 0.02, $"{mode}World2Image Centre Y"); + Assert.AreEqual(ptsImage[1].X,andBack[1].X, 0.02, $"{mode}World2Image TopLeft X"); + Assert.AreEqual(ptsImage[1].Y,andBack[1].Y, 0.02, $"{mode}World2Image TopLeft Y"); + Assert.AreEqual(ptsImage[2].X,andBack[2].X, 0.02, $"{mode}World2Image TopRight X"); + Assert.AreEqual(ptsImage[2].Y,andBack[2].Y, 0.02, $"{mode}World2Image TopRight Y"); + Assert.AreEqual(ptsImage[3].X,andBack[3].X, 0.02, $"{mode}World2Image BottomRight X"); + Assert.AreEqual(ptsImage[3].Y,andBack[3].Y, 0.02, $"{mode}World2Image BottomRight Y"); + Assert.AreEqual(ptsImage[4].X,andBack[4].X, 0.02, $"{mode}World2Image BottomLeft X"); + Assert.AreEqual(ptsImage[4].Y,andBack[4].Y, 0.02, $"{mode}World2Image BottomLeft Y"); - map.Dispose(); } - + [Test] public void Initalize_MapInstance() { @@ -547,40 +847,59 @@ public void ZoomToBox_WithAspectCorrection() Assert.AreEqual(340, map.Zoom); } - [TestCase(500, 100, 10000, 10000)] - public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, double boxWidth, - double boxHeight) + [TestCase(600, 300, 10000,10000)] + [TestCase(600, 300, 5000,15000)] + [TestCase(600, 300, 15000,5000)] + [TestCase(300, 600, 10000,10000)] + [TestCase(300, 600, 5000,15000)] + [TestCase(300, 600, 15000,5000)] + public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, double dataWidthMetres, double dataHeightMetres) { - // Ensure that map extents contain envelope - Map map = new Map(new Size(mapSizeWidth, mapSizeHeight)); + // Tests to ensure ZoomToExtents shows map extents at maximum possible scale without clipping + // Each test will work through series of MapTransform from 0-360 deg at 30deg increments/ + // The old/new image outputs demonstrate how the updates have fixed problems when viewport is rotated. + var map = new Map(new Size(mapSizeWidth, mapSizeHeight)); map.BackColor= Color.Azure; - var env = new Envelope(0, boxWidth, 0, boxHeight); - env.Translate(700000 - boxHeight * 0.5, 1000000 - boxHeight * 0.5); - + // create layer with single polygon centred on 700,000mE, 1,000,000mN + var env = new Envelope(0, dataWidthMetres, 0, dataHeightMetres); + env.Translate(700000 - dataWidthMetres * 0.5, 1000000 - dataHeightMetres * 0.5); + var extentsPoly = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(env.MinX, env.MinY), + new Coordinate(env.MinX, env.MaxY), + new Coordinate(env.MaxX, env.MaxY), + new Coordinate(env.MaxX, env.MinY), + new Coordinate(env.MinX, env.MinY) + })); + var vl = new VectorLayer("Test Points"); - var gp = new GeometryProvider(env.ToPolygon()); + var gp = new GeometryProvider(extentsPoly); gp.Geometries.Add(new NetTopologySuite.Geometries.Point(env.Centre)); - var llIndicator = new Coordinate(env.BottomLeft()); - llIndicator.X += 100; - llIndicator.Y += 100; - gp.Geometries.Add(new NetTopologySuite.Geometries.Point(llIndicator)); + // red dot for lower left corner + var lowerLeft = new Coordinate(env.BottomLeft()); + lowerLeft.X += 100; + lowerLeft.Y += 100; + gp.Geometries.Add(new NetTopologySuite.Geometries.Point(lowerLeft)); vl.DataSource = gp; map.Layers.Add(vl); - for (var degrees = 0; degrees <= 360; degrees += 30) + for (var degrees = 0; degrees < 360; degrees += 30) { var mapTransform = new System.Drawing.Drawing2D.Matrix(); mapTransform.RotateAt(degrees, new PointF(map.Size.Width / 2, map.Size.Height / 2)); map.MapTransform = mapTransform; + var ext = map.GetExtents(); + Assert.IsTrue(ext.Equals(env)); + // reset view map.Center = new Coordinate(0, 0); map.Zoom = 1000; - - map.ZoomToBox(env); - var fn = - $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_old.png"; + + // OLD: zoom to box, ignoring map rotation: layer extents will overlap borders or have significant margins + map.ZoomToBox(ext); + var fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_bbox_{env.Width}x{env.Height}_OLD_{degrees:000}deg.png"; using (var img = map.GetMap(96)) img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn), System.Drawing.Imaging.ImageFormat.Bmp); @@ -588,10 +907,16 @@ public void ZoomToBox_WithRotatedViewport(int mapSizeWidth, int mapSizeHeight, d map.Center = new Coordinate(0, 0); map.Zoom = 1000; -// map.ZoomToBox(env, true); -// fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_{degrees:0}deg_bbox_{env.Width}x{env.Height}_new.png"; -// using (var img = map.GetMap(96)) -// img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn), System.Drawing.Imaging.ImageFormat.Bmp); + // NEW: zoom to box, taking into account map rotation: map extents will fit perfectly between borders + map.ZoomToBox(env, true); + var polygon = GetMapExtentPolygon(map.Center, map.Zoom, map.MapHeight, map.MapTransformRotation); + // allow small margin by buffering true outline of MapViewport in world coordinates + Assert.IsTrue(polygon.Buffer(1).Contains(extentsPoly), $"{degrees:000}_contains"); + Assert.IsTrue(polygon.Buffer(-1).Intersects(extentsPoly), $"{degrees:000}_intersects"); + + fn = $"ZoomToBox_{mapSizeWidth}x{mapSizeHeight}_bbox_{env.Width}x{env.Height}_NEW_{degrees:000}deg.png"; + using (var img = map.GetMap(96)) + img.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn), System.Drawing.Imaging.ImageFormat.Bmp); } map.Dispose(); From 991abd224a30a5e5cef514e488515275972b1233 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 13 Jul 2019 16:02:17 +0700 Subject: [PATCH 093/186] Scalebar updates for MapTransform and Region housekeeping --- .../Rendering/Decoration/ScaleBar/ScaleBar.cs | 343 +++++++++--------- .../Decoration/ScaleBar/ScaleBarTests.cs | 6 +- 2 files changed, 172 insertions(+), 177 deletions(-) diff --git a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs index cf2f3406..763d3d4e 100644 --- a/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs +++ b/SharpMap/Rendering/Decoration/ScaleBar/ScaleBar.cs @@ -18,7 +18,9 @@ namespace SharpMap.Rendering.Decoration.ScaleBar */ /// - /// Scale Bar map decoration + /// Scale Bar map decoration. + /// Ensure that appropriate is set + /// Also ensure Map.SRID is set appropriately to enable Web Mercator latitude adjustment. /// [Serializable] public class ScaleBar : MapDecoration @@ -47,8 +49,6 @@ public class ScaleBar : MapDecoration private const double VerySmall = 0.0000001; - private const double WebMercatorRadius = 6378137.0; - #endregion private static readonly Dictionary Units = new Dictionary(); @@ -121,13 +121,7 @@ public ScaleBar() #region MapDecoration overrides - /// - /// Function to compute the required size for rendering the map decoration object - /// This is just the size of the decoration object, border settings are excluded - /// - /// The graphics object - /// The mapviewport - /// The size of the map decoration + protected override Size InternalSize(Graphics g, MapViewport map) { CalcScale((int)g.DpiX); @@ -136,33 +130,31 @@ protected override Size InternalSize(Graphics g, MapViewport map) return new Size((int)width, (int)height); } - /// - /// Function to render the actual map decoration. Note special handling when Map.SRID=3857 (WebMercator) - /// - /// - /// protected override void OnRender(Graphics g, MapViewport map) { var rectF = g.ClipBounds; - + if (MapUnit == (int)Unit.Degree) { - var p1 = map.ImageToWorld(new PointF(0, map.Size.Height * 0.5f)); - var p2 = map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height * 0.5f)); - SetScaleD((int)g.DpiX, p1.X, p2.X, p1.Y, map.Size.Width); + // do not use map.Envelope as this is not apparent width on rotated viewports + var lon1 = map.Center.X - map.Zoom * 0.5; + var lon2 = map.Center.X + map.Zoom * 0.5; + SetScaleD((int)g.DpiX, lon1, lon2, map.Center.Y, map.Size.Width); } else - SetScale((int)g.DpiX, map.Envelope.Width, map.Size.Width); + { + SetScale((int)g.DpiX, map.Zoom, map.Size.Width); + } switch (map.SRID) { case 3857: //other spherical variations (all of which are deprecated except 900913): 900913 54004 41001 102113 102100 3785 - var midGrid = map.ImageToWorld(new PointF(map.Size.Width * 0.5f, map.Size.Height * 0.5f)); + // constrain to 85deg N/S - if (Math.Abs(midGrid.Y) >= 20000000) return; + if (Math.Abs(map.Center.Y) >= 20000000) return; // refer to https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor - _webMercatorFactor = 1 / Math.Cosh(midGrid.Y / WebMercatorRadius); + _webMercatorFactor = 1 / Math.Cosh(map.Center.Y / GeoSpatialMath.WebMercatorRadius); break; default: @@ -172,6 +164,8 @@ protected override void OnRender(Graphics g, MapViewport map) var rect = new Rectangle(Point.Truncate(rectF.Location), Size.Truncate(rectF.Size)); RenderScaleBar(g, rect); + + Dirty = false; } #endregion @@ -207,7 +201,6 @@ private void RenderScaleBar(Graphics g, Rectangle rc) RenderSegmentText(g, rc.Left + nOffsetX, rc.Top + nOffsetY + _barWidth + GapBarToSegmentText, _numTics, pixelsPerTic, scaleBarUnitsPerTick, _barUnitShortName); - Dirty = false; } /// @@ -470,8 +463,78 @@ private static void RenderTicBarMeridian1(Graphics g, int nNumTics, int nBarWidt } } +private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + if (_forceRecalc) + { + // revert to large scale unit + _barUnit = BarUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + _forceRecalc = false; + } + + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTic); - #endregion + if (BarUnitLargeScale != BarUnitSmallScale) + { + if (_barUnitFactor == _barUnitFactorSmallScale) + { + // currently on SmallScale units... + // check how many scale bar units if using LargeScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorLargeScale, + out int chkPixelsPerTick, out double chkScaleBarUnitsPerTic); + + // check if LargeScale bar length < 1 SmallScale unit + if (NumTicks * chkScaleBarUnitsPerTic * _barUnitFactorLargeScale < _barUnitFactorSmallScale) + { + // switch to LargeScale units + _barUnit = _barUnitLargeScale; + _barUnitFactor = _barUnitFactorLargeScale; + _barUnitName = _barUnitNameLargeScale; + _barUnitShortName = _barUnitShortNameLargeScale; + + pixelsPerTic = chkPixelsPerTick; + scaleBarUnitsPerTic = chkScaleBarUnitsPerTic; + } + } + else + { + // currently on LargeScale units... + // check if LargeScale bar length >= 1 SmallScale unit (ie LargeScale units never exceed 1 SmallScale unit) + if (NumTicks * scaleBarUnitsPerTic * _barUnitFactorLargeScale >= _barUnitFactorSmallScale) + { + // recalc for SmallScale unit + CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, + out pixelsPerTic, out scaleBarUnitsPerTic); + + // switch to SmallScale units + _barUnit = _barUnitSmallScale; + _barUnitFactor = _barUnitFactorSmallScale; + _barUnitName = _barUnitNameSmallScale; + _barUnitShortName = _barUnitShortNameSmallScale; + } + } + } + } + + private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, + out int pixelsPerTic, out double scaleBarUnitsPerTic) + { + int minPixelsPerTic = widthOnDevice / (numTics * 2); + double barScale = mapScale / fBarUnitFactor; + int pixelsPerInch = dpi; + double barUnitsPerPixel = barScale * GeoSpatialMath.MetersPerInch / pixelsPerInch; + + //calculate the result + barUnitsPerPixel *= _webMercatorFactor; + + scaleBarUnitsPerTic = minPixelsPerTic * barUnitsPerPixel; + scaleBarUnitsPerTic = GetRoundIncrement(scaleBarUnitsPerTic); + pixelsPerTic = (int)(scaleBarUnitsPerTic / barUnitsPerPixel); + } /// /// Renders the verbal text above the scale bar. @@ -490,13 +553,6 @@ private void RenderVerbalScale(Graphics g, int x, int y) { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far }, ref lastX); } - private static readonly StringFormat TopCenter = - new StringFormat - { - LineAlignment = StringAlignment.Near, - Alignment = StringAlignment.Center - }; - /// /// Renders the segment text below the scale bar /// @@ -609,9 +665,59 @@ private void CalcScale(int dpi) fScale = ScaleCalculations.CalculateScaleLatLong(_lon1, _lon2, _lat, _pageWidth, dpi); else fScale = ScaleCalculations.CalculateScaleNonLatLong(_mapWidth, _pageWidth, _mapUnitFactor, dpi); - _scale = fScale; + Scale = fScale; + } + + private void SetScaleD(int dpi, double lon1, double lon2, double lat, int widthInPixel) + { + _lon1 = lon1; + _lon2 = lon2; + _lat = lat; + _pageWidth = widthInPixel; + CalcScale(dpi); + } + + private void SetScale(int dpi, double mapWidth, int widthInPixel) + { + _mapWidth = mapWidth; + _pageWidth = widthInPixel; + CalcScale(dpi); + } + + private string ScaleBarText(double scale, ScaleBarLabelText scaleText) + { + switch (scaleText) + { + case ScaleBarLabelText.NoText: + return string.Empty; + case ScaleBarLabelText.JustUnits: + return _barUnitName; + default: + var precision = 0; + + scale *= _webMercatorFactor; + + //set the precision. Keep the first 5 (ScalePrecisionDigits) digits. + if (scale > 0) + { + var magnitude = (int)(Math.Log10(scale)); + precision = ScalePrecisionDigits - magnitude; + if (precision < 0) + precision = 0; + if (magnitude >= 2) + //don't show the precision if the scale is less than than 1:100 (e.g. 1:1000) + precision = 0; + + } + var format = string.Format("N{0}", precision); + + scale = FormatRealScale(scale); + return "1 : " + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); + } } + #endregion + /// /// Gets or sets the foreground color, used to render the labeling /// @@ -622,7 +728,6 @@ public Color ForeColor { _foreColor = value; OnViewChanged(); - Dirty = true; } } @@ -638,7 +743,6 @@ public Font Font return; _font = value; OnViewChanged(); - Dirty = true; } } @@ -652,7 +756,6 @@ public Color BarColor1 { _barColor1 = value; OnViewChanged(); - Dirty = true; } } @@ -666,7 +769,6 @@ public Color BarColor2 { _barColor2 = value; OnViewChanged(); - Dirty = true; } } @@ -681,7 +783,6 @@ public int BarWidth if (value < 1) value = 1; _barWidth = value; OnViewChanged(); - Dirty = true; } } @@ -698,9 +799,11 @@ public int BarWidth private string _barUnitName, _barUnitShortName; private string _barUnitNameLargeScale, _barUnitShortNameLargeScale; private string _barUnitNameSmallScale, _barUnitShortNameSmallScale; + private int _width; /// - /// Map unit + /// World coordinate system unit. You must set this appropriately as it is NOT deduced from Map.SRID. + /// Typically meters (1) for projected coordinate systems, or degrees (7) for geographic coordinate systems. /// public int MapUnit { @@ -711,7 +814,6 @@ public int MapUnit GetUnitInformation(_mapUnit, out _mapUnitFactor, out _mapUnitName, out _mapUnitShortName); CalcScale(96); OnViewChanged(); - Dirty = true; } } @@ -800,7 +902,6 @@ public int BarUnitLargeScale _forceRecalc = true; CalcScale(96); OnViewChanged(); - Dirty = true; } } @@ -819,7 +920,6 @@ public int BarUnitSmallScale _forceRecalc = true; CalcScale(96); OnViewChanged(); - Dirty = true; } } private static void GetUnitInformation(int mapUnit, out double mapUnitFactor, out string mapUnitName, @@ -851,7 +951,6 @@ public bool BarOutline { _barOutline = value; OnViewChanged(); - Dirty = true; } } @@ -865,7 +964,6 @@ public Color BarOutlineColor { _barOutlineColor = value; OnViewChanged(); - Dirty = true; } } @@ -875,11 +973,12 @@ public Color BarOutlineColor public double Scale { get { return _scale; } - set + private set { + if (_scale == value) return; + _scale = value; OnViewChanged(); - Dirty = true; } } @@ -930,23 +1029,7 @@ private void GetBarUnitInfo(out double factor, out string name, out string short } */ - private void SetScaleD(int dpi, double lon1, double lon2, double lat, int widthInPixel) - { - _lon1 = lon1; - _lon2 = lon2; - _lat = lat; - _pageWidth = widthInPixel; - CalcScale(dpi); - OnViewChanged(); - } - - private void SetScale(int dpi, double mapWidth, int widthInPixel) - { - _mapWidth = mapWidth; - _pageWidth = widthInPixel; - CalcScale(dpi); - OnViewChanged(); - } + /// /// Gets or sets the number of ticks @@ -959,7 +1042,6 @@ public int NumTicks if (value < 1) value = 1; _numTics = value; OnViewChanged(); - Dirty = true; } } @@ -973,44 +1055,21 @@ public ScaleBarLabelText ScaleText { _barLabelText = value; OnViewChanged(); - Dirty = true; } } /// /// Gets or sets the width of the scale bar /// - public int Width { get; set; } - - private string ScaleBarText(double scale, ScaleBarLabelText scaleText) + public int Width { - switch (scaleText) + get => _width; + set { - case ScaleBarLabelText.NoText: - return string.Empty; - case ScaleBarLabelText.JustUnits: - return _barUnitName; - default: - var precision = 0; - - scale *= _webMercatorFactor; + if (_width == value) return; - //set the precision. Keep the first 5 (ScalePrecisionDigits) digits. - if (scale > 0) - { - var magnitude = (int)(Math.Log10(scale)); - precision = ScalePrecisionDigits - magnitude; - if (precision < 0) - precision = 0; - if (magnitude >= 2) - //don't show the precision if the scale is less than than 1:100 (e.g. 1:1000) - precision = 0; - - } - var format = string.Format("N{0}", precision); - - scale = FormatRealScale(scale); - return "1 : " + scale.ToString(format, System.Globalization.CultureInfo.CurrentCulture); + _width = value; + OnViewChanged(); } } @@ -1024,7 +1083,6 @@ public ScaleBarStyle BarStyle { _barStyle = value; OnViewChanged(); - Dirty = true; } } @@ -1038,7 +1096,6 @@ public int MarginLeft { _marginLeft = value; OnViewChanged(); - Dirty = true; } } @@ -1052,17 +1109,17 @@ public int MarginRight { _marginRight = value; OnViewChanged(); - Dirty = true; } } #region EventInvokers /// - /// Is this required? + /// Signal that properties have changed /// private void OnViewChanged() { + Dirty = true; } /// @@ -1072,9 +1129,6 @@ private void OnViewChanged() #endregion - - #region Private static helpers - private class UnitInfo { public readonly int Unit; @@ -1092,11 +1146,18 @@ public UnitInfo(int unit, double toMeter, string name, string abbreviation) } } + #region Private static helpers + //for multipliers ranging from .00001 to 10000000000 + // Candidates are 1, 2, 2.5, and 5 * multiplier + // First candidate >starting interval is new interval + // next candidate + //next multiplier + private static double GetRoundIncrement(double startValue) { int nPower; //power of 10. Range of -5 to 10 gives huge scale range. @@ -1114,79 +1175,6 @@ private static double GetRoundIncrement(double startValue) return candidate; //return the maximum } - private void CalcLargeOrSmallUnit(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, - out int pixelsPerTic, out double scaleBarUnitsPerTic) - { - if (_forceRecalc) - { - // revert to large scale unit - _barUnit = BarUnitLargeScale; - _barUnitFactor = _barUnitFactorLargeScale; - _barUnitName = _barUnitNameLargeScale; - _barUnitShortName = _barUnitShortNameLargeScale; - _forceRecalc = false; - } - - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactor, out pixelsPerTic, out scaleBarUnitsPerTic); - - if (BarUnitLargeScale != BarUnitSmallScale) - { - if (_barUnitFactor == _barUnitFactorSmallScale) - { - // currently on SmallScale units... - // check how many scale bar units if using LargeScale unit - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorLargeScale, - out int chkPixelsPerTick, out double chkScaleBarUnitsPerTic); - - // check if LargeScale bar length < 1 SmallScale unit - if (NumTicks * chkScaleBarUnitsPerTic * _barUnitFactorLargeScale < _barUnitFactorSmallScale) - { - // switch to LargeScale units - _barUnit = _barUnitLargeScale; - _barUnitFactor = _barUnitFactorLargeScale; - _barUnitName = _barUnitNameLargeScale; - _barUnitShortName = _barUnitShortNameLargeScale; - - pixelsPerTic = chkPixelsPerTick; - scaleBarUnitsPerTic = chkScaleBarUnitsPerTic; - } - } - else - { - // currently on LargeScale units... - // check if LargeScale bar length >= 1 SmallScale unit (ie LargeScale units never exceed 1 SmallScale unit) - if (NumTicks * scaleBarUnitsPerTic * _barUnitFactorLargeScale >= _barUnitFactorSmallScale) - { - // recalc for SmallScale unit - CalcBarScale(dpi, widthOnDevice, numTics, mapScale, _barUnitFactorSmallScale, - out pixelsPerTic, out scaleBarUnitsPerTic); - - // switch to SmallScale units - _barUnit = _barUnitSmallScale; - _barUnitFactor = _barUnitFactorSmallScale; - _barUnitName = _barUnitNameSmallScale; - _barUnitShortName = _barUnitShortNameSmallScale; - } - } - } - } - - private void CalcBarScale(int dpi, int widthOnDevice, int numTics, double mapScale, double fBarUnitFactor, - out int pixelsPerTic, out double scaleBarUnitsPerTic) - { - int minPixelsPerTic = widthOnDevice / (numTics * 2); - double barScale = mapScale / fBarUnitFactor; - int pixelsPerInch = dpi; - double barUnitsPerPixel = barScale * GeoSpatialMath.MetersPerInch / pixelsPerInch; - - //calculate the result - barUnitsPerPixel *= _webMercatorFactor; - - scaleBarUnitsPerTic = minPixelsPerTic * barUnitsPerPixel; - scaleBarUnitsPerTic = GetRoundIncrement(scaleBarUnitsPerTic); - pixelsPerTic = (int)(scaleBarUnitsPerTic / barUnitsPerPixel); - } - /// /// Keep only 5 (ScalePrecisionDigits) digits of precision for the scale and return the scale after formatted. /// @@ -1203,6 +1191,13 @@ private static double FormatRealScale(double scale) return roundedScale; } + private static readonly StringFormat TopCenter = + new StringFormat + { + LineAlignment = StringAlignment.Near, + Alignment = StringAlignment.Center + }; + /// /// Return the precision for the segment text of the scale bar. /// @@ -1221,7 +1216,7 @@ private static int PrecisionOfSegmentText(double value) return precision; } - static private int MeasureDisplayStringWidthExact(Graphics graphics, string text, + private static int MeasureDisplayStringWidthExact(Graphics graphics, string text, Font font) { var ranges = new[] { new CharacterRange(0, text.Length) }; diff --git a/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs index 4cff4578..bf8126ba 100644 --- a/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs +++ b/UnitTests/Rendering/Decoration/ScaleBar/ScaleBarTests.cs @@ -31,9 +31,9 @@ public void SetupMap() { //System.IO.Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "BruTileCache", "Osm")); - var files = System.IO.Directory.GetFiles(Path.Combine(Path.GetTempPath(), "SharpMap")); - foreach (var file in files) - System.IO.File.Delete(file); +// var files = System.IO.Directory.GetFiles(Path.Combine(Path.GetTempPath(), "SharpMap")); +// foreach (var file in files) +// System.IO.File.Delete(file); var gss = new NtsGeometryServices(); var css = new SharpMap.CoordinateSystems.CoordinateSystemServices( From 111059fdb92db106c4d96e6a52a5e396eaab1e90 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 1 Sep 2019 21:14:26 +0700 Subject: [PATCH 094/186] Remove redundant methods from MapViewport --- SharpMap/Map/MapViewport.cs | 44 -------------- UnitTests/MapTest.cs | 112 ++++++++++++++++++------------------ 2 files changed, 57 insertions(+), 99 deletions(-) diff --git a/SharpMap/Map/MapViewport.cs b/SharpMap/Map/MapViewport.cs index 880a8fb4..48a25a41 100644 --- a/SharpMap/Map/MapViewport.cs +++ b/SharpMap/Map/MapViewport.cs @@ -313,50 +313,6 @@ public Coordinate ImageToWorld(PointF p, bool careAboutMapTransform = false) return pts[0]; } - /// - /// temporarily retained for benchmarking purposes only - /// - [Obsolete] - public PointF WorldToImageOld(Coordinate p, bool careAboutMapTransform) - { - var pTmp = WorldToImage(p); - if (!careAboutMapTransform) - return pTmp; - - var pts = new[] { pTmp }; - //Monitor.Enter(_mapTransform); - using (var mapTransform = MapTransform) - { - if (mapTransform.IsIdentity == false) - { - mapTransform.TransformPoints(pts); - } - } - //Monitor.Exit(_mapTransform); - - return pts[0]; - } - - /// - /// temporarily retained for benchmarking purposes only - /// - [Obsolete] - public PointF WorldToImageOld(Coordinate p) - { - if (p.IsEmpty()) - return PointF.Empty; - - double x = (p.X - Left) / PixelWidth; - if (double.IsNaN(x)) - return PointF.Empty; - - double y = (Top - p.Y) / PixelHeight; - if (double.IsNaN(y)) - return PointF.Empty; - - return new PointF((float)x, (float)y); - } - /// /// Creates a map viewport from a given map /// diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index 3956c3c3..4060c5ad 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -396,62 +396,64 @@ public void WorldToImageTransform_Benchmark(string shapeFileName, float mapTrans Trace.WriteLine($"WorldToImageTransform_Benchmark {shapeFileName} {mapTransformRotation:000}deg MAP old: {oldTimesAvgMap} MAP new: {newTimesAvgMap}"); // allow a little bit of leeway Assert.LessOrEqual(newTimesAvgMap / oldTimesAvgMap,1.2,$"{shapeFileName}_{mapTransformRotation}deg_MAP" ); - - // MapViewport Tests - var mvp = (MapViewport) map; - for (var i = 0; i < numTests; i++) - { - // old - sw.Reset(); - sw.Start(); - foreach (var geom in geoms) - { - foreach (var p in geom.Coordinates) - { - var pt = mvp.WorldToImageOld(p, true); - if (!mvp.MapTransformRotation.Equals(0f)) - { - using (var transform = mvp.MapTransform) - { - var pts = new[] {pt}; - transform.TransformPoints(pts); - pt = pts[0]; - } - } - } - } - sw.Stop(); - oldTimesMvp.Add(sw.ElapsedMilliseconds); - - // new - sw.Reset(); - sw.Start(); - foreach (var geom in geoms) - { - if (geom.Coordinates.Length == 0) - { - var pt = mvp.WorldToImage(geom.Coordinates[0], true); - } - else - { - var pts = mvp.WorldToImage(geom.Coordinates, true); - } - } - - sw.Stop(); - newTimesMvp.Add(sw.ElapsedMilliseconds); - } - - oldTimesMvp.Sort(); - newTimesMvp.Sort(); - - var oldTimesAvgMvp = oldTimesMvp.Skip(2).Take(16).Average(); - var newTimesAvgMvp = newTimesMvp.Skip(2).Take(16).Average(); - - Trace.WriteLine($"WorldToImageTransform_Benchmark {shapeFileName} {mapTransformRotation:000}deg MVP old: {oldTimesAvgMvp} MVP new: {newTimesAvgMvp}"); - // allow a little bit of leeway - Assert.LessOrEqual(newTimesAvgMvp/ oldTimesAvgMvp,1.2, $"{shapeFileName}_{mapTransformRotation}deg_MVP" ); +// NOTE: MapViewport Tests no longer relevant due to redundant method WorldToImageOld being removed +// Section commented out AFTER confirming test results +// // MapViewport Tests +// var mvp = (MapViewport) map; +// for (var i = 0; i < numTests; i++) +// { +// // old +// sw.Reset(); +// sw.Start(); +// foreach (var geom in geoms) +// { +// foreach (var p in geom.Coordinates) +// { +// var pt = mvp.WorldToImageOld(p, true); +// if (!mvp.MapTransformRotation.Equals(0f)) +// { +// using (var transform = mvp.MapTransform) +// { +// var pts = new[] {pt}; +// transform.TransformPoints(pts); +// pt = pts[0]; +// } +// } +// } +// } +// sw.Stop(); +// oldTimesMvp.Add(sw.ElapsedMilliseconds); +// +// // new +// sw.Reset(); +// sw.Start(); +// foreach (var geom in geoms) +// { +// if (geom.Coordinates.Length == 0) +// { +// var pt = mvp.WorldToImage(geom.Coordinates[0], true); +// } +// else +// { +// var pts = mvp.WorldToImage(geom.Coordinates, true); +// } +// } +// +// sw.Stop(); +// newTimesMvp.Add(sw.ElapsedMilliseconds); +// } +// +// oldTimesMvp.Sort(); +// newTimesMvp.Sort(); +// +// var oldTimesAvgMvp = oldTimesMvp.Skip(2).Take(16).Average(); +// var newTimesAvgMvp = newTimesMvp.Skip(2).Take(16).Average(); +// +// +// Trace.WriteLine($"WorldToImageTransform_Benchmark {shapeFileName} {mapTransformRotation:000}deg MVP old: {oldTimesAvgMvp} MVP new: {newTimesAvgMvp}"); +// // allow a little bit of leeway +// Assert.LessOrEqual(newTimesAvgMvp/ oldTimesAvgMvp,1.2, $"{shapeFileName}_{mapTransformRotation}deg_MVP" ); map.Dispose(); } From 57f642cab3a8a523b7654a84b53881a7847a9064 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 4 Sep 2019 10:08:42 +0200 Subject: [PATCH 095/186] Fix missing System.Data.SQLite.Core packages.config Fix missing KnownTileSource MapQuest --- UnitTests/Serialization/MapTest.cs | 2 +- UnitTests/UnitTests.csproj | 11 +++++++++-- UnitTests/packages.config | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/UnitTests/Serialization/MapTest.cs b/UnitTests/Serialization/MapTest.cs index 7a4436c4..9038e7d6 100644 --- a/UnitTests/Serialization/MapTest.cs +++ b/UnitTests/Serialization/MapTest.cs @@ -73,7 +73,7 @@ private static void TestMaps(string name, Map m, Map mD) public void TestMap2() { var m = new Map(_mapSize); - m.BackgroundLayer.Add(new TileLayer(KnownTileSources.Create(KnownTileSource.MapQuest), "MapQuest")); + m.BackgroundLayer.Add(new TileLayer(KnownTileSources.Create(KnownTileSource.BingHybridStaging), "BingHybridStaging")); string cn = $"Data Source={Path.Combine("TestData", "osm_aurich.sqlite")};"; diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 9d0e7991..86137587 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -59,6 +59,14 @@ --> + + + + False + C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll + + + ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll @@ -87,7 +95,6 @@ ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - ..\packages\Npgsql.2.2.7\lib\net40\Mono.Security.dll True @@ -372,4 +379,4 @@ - \ No newline at end of file + diff --git a/UnitTests/packages.config b/UnitTests/packages.config index 09cd388b..c37a00df 100644 --- a/UnitTests/packages.config +++ b/UnitTests/packages.config @@ -23,5 +23,6 @@ + - \ No newline at end of file + From 7ac685f3577116e6d9fea89ec49452cc18967e73 Mon Sep 17 00:00:00 2001 From: FObermaier Date: Wed, 4 Sep 2019 10:41:31 +0200 Subject: [PATCH 096/186] Remove unused namespaces * Ignore test with broken functionality, need to address that later --- UnitTests/MapTest.cs | 3 --- UnitTests/Serialization/MapTest.cs | 2 +- UnitTests/Serialization/SerializationTests.cs | 1 + 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/UnitTests/MapTest.cs b/UnitTests/MapTest.cs index 4060c5ad..bc2ccf0a 100644 --- a/UnitTests/MapTest.cs +++ b/UnitTests/MapTest.cs @@ -1,7 +1,6 @@ using System; using System.Collections.ObjectModel; using System.Diagnostics; -using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Drawing.Imaging; using System.Linq; @@ -12,8 +11,6 @@ using NetTopologySuite.Geometries; using NetTopologySuite.Geometries.Utilities; using NetTopologySuite.IO; -using NetTopologySuite.Operation.Polygonize; -using NUnit.Framework.Constraints; using SharpMap; using SharpMap.Data.Providers; using Geometry = GeoAPI.Geometries.IGeometry; diff --git a/UnitTests/Serialization/MapTest.cs b/UnitTests/Serialization/MapTest.cs index 9038e7d6..e5180855 100644 --- a/UnitTests/Serialization/MapTest.cs +++ b/UnitTests/Serialization/MapTest.cs @@ -69,7 +69,7 @@ private static void TestMaps(string name, Map m, Map mD) - [Test, Description("MapQuest base map, OSM of Aurich, randomly styled")] + [Test, Description("BingHybridStaging base map, OSM of Aurich, randomly styled"), Ignore("Need to fix BruTile serialization")] public void TestMap2() { var m = new Map(_mapSize); diff --git a/UnitTests/Serialization/SerializationTests.cs b/UnitTests/Serialization/SerializationTests.cs index b06b4b84..bda70831 100644 --- a/UnitTests/Serialization/SerializationTests.cs +++ b/UnitTests/Serialization/SerializationTests.cs @@ -16,6 +16,7 @@ namespace BruTile.Serialization.Tests { + [Category("BruTile"), Ignore("Fix first")] public class SerializationTests { [Test] From 217169fba8226d6a89914e1b2b4cbaf2a440591c Mon Sep 17 00:00:00 2001 From: Tim C Date: Wed, 17 Jul 2019 14:09:41 +0700 Subject: [PATCH 097/186] Graticule Map Decoration --- SharpMap/Rendering/Decoration/Graticule.cs | 1225 +++++++++++++++++ .../Rendering/Decoration/GraticuleStyle.cs | 407 ++++++ 2 files changed, 1632 insertions(+) create mode 100644 SharpMap/Rendering/Decoration/Graticule.cs create mode 100644 SharpMap/Rendering/Decoration/GraticuleStyle.cs diff --git a/SharpMap/Rendering/Decoration/Graticule.cs b/SharpMap/Rendering/Decoration/Graticule.cs new file mode 100644 index 00000000..beb05966 --- /dev/null +++ b/SharpMap/Rendering/Decoration/Graticule.cs @@ -0,0 +1,1225 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using Common.Logging; +using GeoAPI.CoordinateSystems; +using GeoAPI.CoordinateSystems.Transformations; +using GeoAPI.Geometries; +using NetTopologySuite.Geometries; +using SharpMap.Utilities; +using NetTopologySuite.Geometries.Utilities; +using NetTopologySuite.Utilities; +using SharpMap.Styles; +using Point = NetTopologySuite.Geometries.Point; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// Map Decoration to draw projected and/or geographic graticule on the map. + /// The Map.SRID MUST be set to a valid ID for the graticule to render, as + /// appropriate units are derived from the map's coordinate reference system + /// (eg degrees-minutes-seconds, or projected units such as metres). + /// + /// The Projected Coordinate System graticule is managed via , + /// and the Geographic Coordinate System graticule via + /// + /// + public class Graticule : MapDecoration + { + static readonly ILog _logger = LogManager.GetLogger(typeof(Graticule)); + + private const double OneSecond = 1 / 3600.0; + private const double GeographicTolerance = 1e-9; // 1dp more than typical precision + private const double ProjectedTolerance = 1e-4; // 1dp more than typical precision + private const double SecondOfArcDecimalPlaces = 1e-4; // approx. 1mm at the equator + + private const int PcsPowerRangeMin = -5; + private const int PcsPowerRangeMax = 10; + private readonly double[] _pcsPreferredMultiples = {5, 2.5, 2, 1}; // MUST be in descending order + + private const int GcsPowerRangeMin = -5; + private const int GcsPowerRangeMax = 0; + + private readonly double[] + _gcsPreferredMultiples = {90, 60, 30, 20, 15, 10, 5, 2.5, 2, 1}; // MUST be in descending order + + private readonly Polygon _webMercatorClipPolygon = new Polygon( + new LinearRing(new [] + { + GeoSpatialMath.WebMercatorEnv.BottomLeft(), + GeoSpatialMath.WebMercatorEnv.TopLeft(), + GeoSpatialMath.WebMercatorEnv.TopRight(), + GeoSpatialMath.WebMercatorEnv.BottomRight(), + GeoSpatialMath.WebMercatorEnv.BottomLeft(), + })); + + private int _srid; + private Envelope _previousExtents; + private Polygon _viewClipPolygon; + private ICoordinateSystem _coordinateSystem; + private string _pcsUnitSuffix; + private double _mapScale; + + private Envelope _pcsDomain; + private Envelope _gcsDomain; + private IMathTransform _unProject; + private IMathTransform _project; + private Envelope _pcsConstrExtents; + private Envelope _gcsConstrExtents; + private int _pcsNumSubdivisions; + private int _gcsNumSubdivisions; + + /// + /// Helper class for managing graticule geometry + /// + private class GraticuleDef + { + public bool IsGeographicGraticule; + public string Label; + public bool IsPrimary; + public bool IsParallel; + public LineString WcsGraticule; + public MultiPoint WcsTickMarks; + public PointF[] ImageGraticule; + public PointF[] ImageTickMarks; + public bool[] ImageTickStyle; + } + + /// + /// Enumerator for indicating which end(s) of a line should be labelled + /// + [Flags] + private enum LabelEnds + { + None = 0, + Start = 1, // label start of line + End = 2, // label end of line + Both = Start + End + } + + /// + /// Graticule style definition for the Projected Coordinate System + /// + public GraticuleStyle PcsGraticuleStyle { get; set; } + + /// + /// Graticule style definition for the Geographic Coordinate System + /// + public GraticuleStyle GcsGraticuleStyle { get; set; } + + public Graticule() + { + Location = new System.Drawing.Point(0, 0); + Padding = new Size(0, 0); + Anchor = MapDecorationAnchor.LeftTop; + BorderColor = Color.Transparent; + BackgroundColor = Color.Transparent; + + PcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Bold, + GraticuleStyle.GraticuleLineStyle.Continuous, true, + GraticuleStyle.GraticuleDecorationBorders.LeftBottom) + { + SecondaryPen = {DashStyle = DashStyle.Dash} + }; + + + GcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Subtle, + GraticuleStyle.GraticuleLineStyle.HollowTick, false, + GraticuleStyle.GraticuleDecorationBorders.RightTop); + } + + protected override Size InternalSize(Graphics g, MapViewport map) + { + return new Size(map.Size.Width, map.Size.Height); + } + + protected override void OnRender(Graphics g, MapViewport map) + { + try + { + if (_srid != map.SRID) + InitCoordinateSystem(map.SRID); + + if (_coordinateSystem == null) return; + + if (_previousExtents is null || !_previousExtents.Equals(map.Envelope) || + PcsGraticuleStyle.NumSubdivisions != _pcsNumSubdivisions || + GcsGraticuleStyle.NumSubdivisions != _gcsNumSubdivisions) + CalculateMetrics(g, map); + + if (_coordinateSystem is IProjectedCoordinateSystem) + { + OnRenderInternal(g, map, PcsGraticuleStyle, _pcsConstrExtents, _pcsDomain); + OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain); + } + else + OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain); + } + catch (NullReferenceException ex) + { + _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); + _logger.Error(ex); + } + } + + /// + /// Fully render a graticule according to the style + /// + /// + /// + /// + /// + /// + private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, + Envelope constrExtents, Envelope crsDomain) + { + var visibleRef = style.VisibilityUnits == VisibilityUnits.Scale ? _mapScale : map.Zoom; + + if (style.Division <= 0 || style.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.None || + visibleRef <= style.MinVisible || visibleRef > style.MaxVisible || + constrExtents == null || constrExtents.IsNull) + return; + + var isGcsStyle = style == GcsGraticuleStyle; + var targetFactory = new GeometryFactory(new PrecisionModel()); + var tolerance = style == GcsGraticuleStyle ? GeographicTolerance : ProjectedTolerance; + + var graticuleDefs = new List(); + // calculate geometry for Meridians and Parallels in world coordinate system + graticuleDefs.AddRange(CalculateParallels(style, constrExtents, crsDomain)); + graticuleDefs.AddRange(CalculateMeridians(style, constrExtents, crsDomain)); + + // project / simplify / clip / transform to image space + foreach (var def in graticuleDefs) + { + // geographic >> projection + if (isGcsStyle && _project != null) + { + def.WcsGraticule = + (LineString) GeometryTransform.TransformLineString(def.WcsGraticule, _project, targetFactory); + def.WcsTickMarks = new MultiPoint(TransformPreserveZ(_project, def.WcsTickMarks.Coordinates)); + } + + // Simplify (AFTER doing any projection) + var graticuleLine = def.WcsGraticule; + if (graticuleLine == null) continue; + if (graticuleLine.NumPoints > 2) + { + int same; + if (def.IsParallel) + { + var initialY = graticuleLine.Coordinates[0].Y; + same = graticuleLine.Coordinates.Count(c => Math.Abs(c.Y - initialY) < tolerance); + } + else + { + var initialX = graticuleLine.Coordinates[0].X; + same = graticuleLine.Coordinates.Count(c => Math.Abs(c.X - initialX) < tolerance); + } + + if (graticuleLine.Coordinates.Length == same) + { + // simplify to single line segment + graticuleLine = new LineString(new[] + { + graticuleLine.Coordinates[0], + graticuleLine.Coordinates[graticuleLine.NumPoints - 1] + }); + } + } + + // Clip + Transform to image. See CalculateMetrics for special handling of _viewClipPolygon and WebMercator + def.ImageGraticule = map.WorldToImage(_viewClipPolygon.Intersection(graticuleLine).Coordinates, true); + + var clippedTicks = _viewClipPolygon.Intersection(def.WcsTickMarks).Coordinates; + // transfer Z ordinate to bool[] to indicate Primary or Secondary pen when rendering + def.ImageTickMarks = map.WorldToImage(clippedTicks, true); + def.ImageTickStyle = new bool[clippedTicks.Length]; + for (var j = 0; j < clippedTicks.Length; j++) + def.ImageTickStyle[j] = Convert.ToInt32 (clippedTicks[j].Z) == 1; + } + + // Render + var ticksAndEdgeCuts = graticuleDefs.Where(def => + { + var s = def.IsGeographicGraticule + ? GcsGraticuleStyle + : PcsGraticuleStyle; + + if (def.IsPrimary) + return s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.SolidTick || + s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.HollowTick; + + return s.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.SolidTick || + s.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.HollowTick; + }).ToArray(); + + var linesOnly = graticuleDefs.Except(ticksAndEdgeCuts).ToArray(); + + if (ticksAndEdgeCuts.Length > 0) + { + RenderGraticuleTicks(g, ticksAndEdgeCuts); + RenderEdgeCuts(g, ticksAndEdgeCuts); + } + + if (linesOnly.Length > 0) + { + RenderGraticuleLines(g, linesOnly); + } + + RenderLabels(g, graticuleDefs, map.MapTransformRotation); + } + + /// + /// Progressing from South to North, calculate geometry for each parallel at regular intervals from west to east, + /// constraining to CRS domain where applicable. + /// + /// + /// + /// + /// List of graticule geometries for rendering + private List CalculateParallels(GraticuleStyle style, Envelope constrExtents, Envelope crsDomain) + { + var parallels = new List(); + var coordList = new List(); + var isGeographicGraticule = style == GcsGraticuleStyle; + var tolerance = isGeographicGraticule ? GeographicTolerance : ProjectedTolerance; + + // Parallels + var iterateX = 1 + Convert.ToInt32((constrExtents.MaxX - constrExtents.MinX) / style.Subdivision); + var iterateY = 1 + Convert.ToInt32((constrExtents.MaxY - constrExtents.MinY) / style.Subdivision); + + for (var i = 0; i < iterateY; i++) + { + //var thisY = constrExtents.MinY; thisY <= constrExtents.MaxY; thisY += style.Subdivision + var thisY = constrExtents.MinY + i*style.Subdivision; + var isPrimaryParallel = IsPrimaryInterval( thisY, style.Division, tolerance); + + if (!isPrimaryParallel && style.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.None) continue; + + if (ExceedsResolution(style, isPrimaryParallel)) continue; + + if (crsDomain != null && !crsDomain.IsNull) + // Ensure parallel Y is within CRS domain + if (thisY < crsDomain.MinY - tolerance || thisY > crsDomain.MaxY + tolerance) + continue; + + coordList.Clear(); + for (var j= 0; j < iterateX; j++) + { + // var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += style.Subdivision + //var x = thisX; + var thisX = constrExtents.MinX + j * style.Subdivision; + var x = thisX; + + // Trim parallel east-west extent to CRS domain + if (crsDomain != null && !crsDomain.IsNull) + //test for difference of 1 full increment or more + if (x < crsDomain.MinX - tolerance) + if (x < crsDomain.MinX - style.Subdivision + tolerance) + continue; + else + x = crsDomain.MinX; + + else if (x > crsDomain.MaxX + tolerance) + if (x > crsDomain.MaxX + style.Subdivision - tolerance) + continue; + else + x = crsDomain.MaxX; + + coordList.Add(new Coordinate(x, thisY)); + } + + if (coordList.Count < 2) continue; + + parallels.Add(new GraticuleDef() + { + IsGeographicGraticule = isGeographicGraticule, + IsParallel = true, + IsPrimary = isPrimaryParallel, + Label = GetFormattedLabel(isGeographicGraticule, thisY, AxisOrientationEnum.North), + WcsGraticule = new LineString(coordList.ToArray()), + WcsTickMarks = (MultiPoint) MultiPoint.Empty // new List().ToArray()) + }); + } + + return parallels; + } + + /// + /// Progressing from West to East, calculate geometry for each meridian at regular intervals from south to north, + /// constraining to CRS domain where applicable. Graticule intersections (ticks) are also computed if required by the style + /// + /// + /// + /// + /// List of graticule geometries for rendering + private List CalculateMeridians(GraticuleStyle style, Envelope constrExtents, Envelope crsDomain) + { + var meridians = new List(); + var coordList = new List(); + var tickList = new List(); + var isGeographicGraticule = style == GcsGraticuleStyle; + var tolerance = isGeographicGraticule ? GeographicTolerance : ProjectedTolerance; + + // Meridians + var iterateX = 1 + Convert.ToInt32((constrExtents.MaxX - constrExtents.MinX) / style.Subdivision) ; + var iterateY = 1+ Convert.ToInt32((constrExtents.MaxY - constrExtents.MinY) / style.Subdivision) ; + + for (var i = 0 ; i < iterateX; i++) + { + //var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += style.Subdivision + var thisX = constrExtents.MinX + i * style.Subdivision; + var isPrimaryMeridian = IsPrimaryInterval(thisX, style.Division, tolerance); + + if (!isPrimaryMeridian && style.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.None) continue; + + if (ExceedsResolution(style, isPrimaryMeridian)) continue; + + if (crsDomain != null && !crsDomain.IsNull) + // Ensure meridian X is within CRS domain + if (thisX < crsDomain.MinX - tolerance || thisX > crsDomain.MaxX + tolerance) + continue; + + coordList.Clear(); + tickList.Clear(); + + for (var j = 0; j < iterateY; j++) + { + //var thisY = constrExtents.MinY; thisY <= constrExtents.MaxY; thisY += style.Subdivision + var thisY = constrExtents.MinY + j * style.Subdivision; + var y = thisY; + + // Trim meridian north-south extent to CRS domain + if (crsDomain != null && !crsDomain.IsNull) + // test for difference of 1 full increment or more + if (y < crsDomain.MinY - tolerance) + if (y < crsDomain.MinY - style.Subdivision + tolerance) //(y + style.Subdivision <= crsDomain.MinY) + continue; + else + y = crsDomain.MinY; + + else if (y > crsDomain.MaxY + tolerance) + if (y > crsDomain.MaxY + style.Subdivision - tolerance)//(y - style.Subdivision >= crsDomain.MaxY) + continue; + else + y = crsDomain.MaxY; + + coordList.Add(_srid == GeoSpatialMath.WebMercatorSrid + ? new Coordinate(CalcScaleCorrectedX(thisX, y), y) + : new Coordinate(thisX, y)); + + // if regular interval has been adjusted to fit CRS bounds + if (Math.Abs(thisY - y) > tolerance) continue; + + // ticks + var isPrimaryParallel = IsPrimaryInterval(thisY,style.Division, tolerance); + + if (!style.IsTickRequired(isPrimaryMeridian, isPrimaryParallel)) continue; + + if (ExceedsResolution(style, isPrimaryParallel)) continue; + + if (crsDomain != null && !crsDomain.IsNull) + // skip this tick if coincident with CRS domain envelope + if (Math.Abs(thisX - crsDomain.MinX) < tolerance || Math.Abs(thisX - crsDomain.MaxX) < tolerance || + Math.Abs(thisY - crsDomain.MinY) < tolerance || Math.Abs(thisY - crsDomain.MaxY) < tolerance) + continue; + + // use Z ordinate to indicate intersection of primary parallel and primary meridian + tickList.Add(new Point( + coordList.Last().X, + coordList.Last().Y, + isPrimaryMeridian && isPrimaryParallel ? 1 : 0)); + } + + if (coordList.Count < 2) continue; + + meridians.Add(new GraticuleDef() + { + IsGeographicGraticule = isGeographicGraticule, + IsParallel = false, + IsPrimary = isPrimaryMeridian, + Label = GetFormattedLabel(isGeographicGraticule, thisX, AxisOrientationEnum.East), + WcsGraticule = new LineString(coordList.ToArray()), + WcsTickMarks = new MultiPoint(tickList.ToArray()) + }); + } + + return meridians; + } + + /// + /// Returns true if value is a multiple of the primaryInterval + /// + /// Number to be check for Primary interval + /// + /// Tolerance in Geographic or Projected units + /// + private bool IsPrimaryInterval(double value, double primaryInterval, double tolerance) + { + var modulo = Math.Abs(value) % primaryInterval; + return modulo < tolerance || primaryInterval - modulo < tolerance; + } + + /// + /// Test to see if this increment is getting too small to be of practical use. + /// This allows secondary graticule to be filtered out independently of primary graticule + /// as user zooms in + /// + /// + /// + /// + private bool ExceedsResolution(GraticuleStyle style, bool isPrimaryIncrement) + { + if (style == GcsGraticuleStyle) + { + // geographic + if (isPrimaryIncrement) + return style.Division < OneSecond; + else + return style.Subdivision < OneSecond; + } + + // projected + if (isPrimaryIncrement) + return style.Division < 1; + else + return style.Subdivision < 1; + } + + /// + /// Format a value with appropriate units and axis suffix + /// + /// + /// + /// + /// Formatted label, such as 7,000,000mN or 8°15'20"E + private string GetFormattedLabel(bool isGeographicCoordinateSystem, double value, AxisOrientationEnum axis) + { + var axisSuffix = string.Empty; + switch (axis) + { + case AxisOrientationEnum.North: + axisSuffix = value >= 0 ? "N" : "S"; + break; + + case AxisOrientationEnum.East: + axisSuffix = value >= 0 ? "E" : "W"; + break; + } + + int dp; + + if (!isGeographicCoordinateSystem) + { + dp = GetDecimalPlaces(value, 3); + return Math.Abs(value).ToString($"N{dp}") + _pcsUnitSuffix + axisSuffix; + } + + // DMS: 8dp approx = 1mm (= 1" arc to 4dp) + var deg = Math.Round(Math.Abs(value), 8, MidpointRounding.AwayFromZero); + var iDeg = (int) (deg); // equiv to Math.Truncate + var dec = deg - iDeg; + + var mins = dec * 60; + var iMin = (int) (mins); // equiv to Math.Truncate + + var secs = Math.Round(deg * 3600 - (iDeg * 3600) - (iMin * 60), 4, MidpointRounding.AwayFromZero); + + if (Math.Abs(secs - 60) < SecondOfArcDecimalPlaces) + { + secs = 0; + iMin += 1; + } + + if (iMin == 60) + { + iMin = 0; + iDeg += 1; + } + + if (iMin == 0 && secs < SecondOfArcDecimalPlaces) + return $"{iDeg}°{axisSuffix}"; + + if (secs < SecondOfArcDecimalPlaces) + return $"{iDeg}°{iMin:00}'{axisSuffix}"; + + dp = GetDecimalPlaces(secs, 4); + var fmt = dp == 0 ? "00" : $"00.{new string('0', dp)}"; + return ($"{iDeg}°{iMin:00}'{secs.ToString(fmt)}\"{axisSuffix}"); + } + + /// + /// Determine number of decimal places required for without any trailing zeros + /// + /// + /// + /// Number of decimal places without any trailing zeros + private static int GetDecimalPlaces(double value, int maxPrecision) + { + if (maxPrecision <= 0) return 0; + + // eg 0.### + var fmt = "0." + new string('#', maxPrecision); + + // implicit rounding away from zero??? + var strValue = value.ToString(fmt); + + return strValue.Contains('.') ? strValue.Reverse().TakeWhile(c => c !='.').Count() : 0; + } + + /// + /// Transform coordinates between coordinate systems, preserving Z ordinate. + /// + /// + /// + /// Transformed array with z ordinate preserved + private IPoint[] TransformPreserveZ(IMathTransform transform, Coordinate[] coords) + { + var transformed = new IPoint[coords.Length]; + for (var i = 0; i < coords.Length; i++) + { + var pt = transform.Transform(coords[i].ToDoubleArray()); + transformed[i] = new Point(pt[0], pt[1], coords[i].Z); + } + + return transformed; + } + + /// + /// Render giving graticule definitions as a simple line according to the associated style + /// + /// + /// + private void RenderGraticuleLines(Graphics g, IEnumerable graticuleDefs) + { + foreach (var def in graticuleDefs) + { + if (def.ImageGraticule == null || def.ImageGraticule.Length < 2) continue; + + var style = def.IsGeographicGraticule + ? GcsGraticuleStyle + : PcsGraticuleStyle; + + g.DrawLines(def.IsPrimary ? style.PrimaryPen : style.SecondaryPen, def.ImageGraticule); + } + } + + /// + /// Render ticks for ALL graticule definitions according to the associated style + /// + /// + /// + private void RenderGraticuleTicks(Graphics g, IEnumerable graticuleDefs) + { + var oldTransform = g.Transform; + + using (var matrix = new System.Drawing.Drawing2D.Matrix()) + { + foreach (var def in graticuleDefs) + { + if (def.ImageTickMarks == null || def.ImageTickMarks.Length == 0) continue; + + var style = def.IsGeographicGraticule + ? GcsGraticuleStyle + : PcsGraticuleStyle; + + var tolerance = def.IsGeographicGraticule ? GeographicTolerance : ProjectedTolerance; + + var orientOn = PointF.Empty; + for (var i = 0; i < def.ImageTickMarks.Length; i++) + { + var tick = def.ImageTickMarks[i]; + if (orientOn.IsEmpty) + { + if (i + 1 < def.ImageTickMarks.Length) + { + orientOn.X = def.ImageTickMarks[i + 1].X; + orientOn.Y = def.ImageTickMarks[i + 1].Y; + } + else if (def.ImageTickMarks.Length >= 2) + { + orientOn.X = def.ImageTickMarks[i - 1].X; + orientOn.Y = def.ImageTickMarks[i - 1].Y; + } + else if (def.ImageGraticule.Length > 0) + { + orientOn = def.ImageGraticule.FirstOrDefault( + p => !(Math.Abs(p.X - tick.X) < tolerance && + Math.Abs(p.Y - tick.Y) < tolerance)); + } + + // final catch + if (orientOn.IsEmpty) orientOn = tick; + } + + var deg = Math.Atan2(tick.Y - orientOn.Y, tick.X - orientOn.X) * 180 / Math.PI; + if (!def.IsParallel) deg += 90; + if (deg < 0) deg += 360; + + matrix.Reset(); + matrix.Translate(tick.X, tick.Y, MatrixOrder.Append); + matrix.RotateAt((float) deg, tick, MatrixOrder.Append); + g.Transform = matrix; + + g.DrawPath(def.ImageTickStyle[i] ? style.PrimaryPen : style.SecondaryPen, + style.GetTick(def.ImageTickStyle[i])); + + orientOn = tick; + System.Diagnostics.Debug.WriteLine($"x={tick.X} y={tick.Y}"); + } + } + } + + g.Transform = oldTransform; + } + + /// + /// Edge cuts are the short lines where a graticule intersects the border + /// + /// + /// + private void RenderEdgeCuts(Graphics g, IEnumerable graticuleDefs) + { + var pt = PointF.Empty; + + foreach (var def in graticuleDefs) + { + if (def.ImageGraticule == null || def.ImageGraticule.Length < 2) continue; + + var style = def.IsGeographicGraticule + ? GcsGraticuleStyle + : PcsGraticuleStyle; + + var margin = def.IsPrimary ? style.PrimaryMargin : style.SecondaryMargin; + + if (margin == 0) continue; + + // starting cut + var dX = def.ImageGraticule[1].X - def.ImageGraticule[0].X; + var dY = def.ImageGraticule[1].Y - def.ImageGraticule[0].Y; + var ratio = (float) (margin / Math.Sqrt(Math.Pow(dX, 2) + Math.Pow(dY, 2))); + + pt.X = def.ImageGraticule[0].X + dX * ratio; + pt.Y = def.ImageGraticule[0].Y + dY * ratio; + + g.DrawLine(def.IsPrimary ? style.PrimaryPen : style.SecondaryPen, def.ImageGraticule[0], pt); + + // ending cut + var len = def.ImageGraticule.Length; + dX = def.ImageGraticule[len - 2].X - def.ImageGraticule[len - 1].X; + dY = def.ImageGraticule[len - 2].Y - def.ImageGraticule[len - 1].Y; + ratio = (float) (margin / Math.Sqrt(Math.Pow(dX, 2) + Math.Pow(dY, 2))); + + pt.X = def.ImageGraticule[len - 1].X + dX * ratio; + pt.Y = def.ImageGraticule[len - 1].Y + dY * ratio; + + g.DrawLine(def.IsPrimary ? style.PrimaryPen : style.SecondaryPen, def.ImageGraticule[len - 1], pt); + } + } + + /// + /// Render labels for ALL graticule definitions according to the associated style + /// + /// + /// Graticule parameters and geometry + /// + private void RenderLabels(Graphics g, IEnumerable graticuleDefs, float mapTransformRotation) + { + var pts = new PointF[2]; + + var originalTransform = g.Transform; + + using (var matrix = new System.Drawing.Drawing2D.Matrix()) + { + foreach (var def in graticuleDefs) + { + if (def.ImageGraticule == null || def.ImageGraticule.Length < 2) continue; + + var style = def.IsGeographicGraticule + ? GcsGraticuleStyle + : PcsGraticuleStyle; + + var labelEnds = GetLabelEnds(style, def, mapTransformRotation); + + if (labelEnds == LabelEnds.None) continue; + + var labelSize = g.MeasureString(def.Label, + def.IsPrimary ? style.PrimaryLabelFont : style.SecondaryLabelFont); + + pts[0] = def.ImageGraticule.First(); + pts[1] = def.ImageGraticule.Last(); + + var lineLen = Math.Sqrt(Math.Pow(pts[0].X - pts[1].X, 2) + + Math.Pow(pts[0].Y - pts[1].Y, 2)); + + // is entire graticule long enough to label? + if (labelSize.Width + style.PrimaryLabelOffset.X >= lineLen) continue; + + if ((labelEnds & LabelEnds.Start) != 0) + RenderLabel(g, matrix, def, style, labelSize, LabelEnds.Start); + if ((labelEnds & LabelEnds.End) != 0) + RenderLabel(g, matrix, def, style, labelSize, LabelEnds.End); + } + } + + g.Transform = originalTransform; + } + + /// + /// Determine which ends of the graticule line should be labelled as per the given , + /// taking into account (any) map rotation and whether this graticule is a Parallel or Meridian + /// + /// Graticule style + /// Graticule definition and geometry + /// + /// + private LabelEnds GetLabelEnds(GraticuleStyle style, GraticuleDef def, float mapTransformRotation) + { + if (!def.IsPrimary && !style.LabelSubdivisions) return LabelEnds.None; + + if (style.LabelBorders == GraticuleStyle.GraticuleDecorationBorders.All) return LabelEnds.Both; + + var ends = LabelEnds.None; + + if (def.IsParallel) + // Parallels are constructed from WEST (left) to EAST (right) + switch (mapTransformRotation) + { + case var _ when mapTransformRotation.Equals((0f)): + case var _ when mapTransformRotation > 325f || mapTransformRotation <= 45f: + + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Left) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Right) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 45f && mapTransformRotation <= 135f: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Top) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Bottom) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 135 && mapTransformRotation <= 225f: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Right) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Left) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 225 && mapTransformRotation <= 325: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Bottom) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Top) > 0) + ends |= LabelEnds.End; + break; + } + else + // Meridians are constructed from SOUTH (bottom) to NORTH (top) + switch (mapTransformRotation) + { + case var _ when mapTransformRotation.Equals((0f)): + case var _ when mapTransformRotation > 325f || mapTransformRotation <= 45f: + + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Bottom) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Top) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 45f && mapTransformRotation <= 135f: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Left) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Right) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 135 && mapTransformRotation <= 225f: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Top) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Bottom) > 0) + ends |= LabelEnds.End; + break; + + case var _ when mapTransformRotation > 225 && mapTransformRotation <= 325: + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Right) > 0) + ends |= LabelEnds.Start; + if (((int) style.LabelBorders & (int) MapDecorationAnchorFlags.Left) > 0) + ends |= LabelEnds.End; + break; + } + + return ends; + } + + /// + /// Draw the label + /// + /// + /// cached matrix to be re-used for each label + /// Graticule definition and geometry + /// Graticule Style + /// estimated label size from g.MeasureString + /// the end of the line to be labelled + private void RenderLabel(Graphics g, System.Drawing.Drawing2D.Matrix matrix, + GraticuleDef def, GraticuleStyle style, SizeF labelSize, LabelEnds thisEnd) + { + var origin = thisEnd == LabelEnds.Start ? def.ImageGraticule.First() : def.ImageGraticule.Last(); + var orientOn = thisEnd == LabelEnds.Start ? def.ImageGraticule.Last() : def.ImageGraticule.First(); + + if (_srid == GeoSpatialMath.WebMercatorSrid) + orientOn = thisEnd == LabelEnds.Start ? + def.ImageGraticule[1] : + def.ImageGraticule[def.ImageGraticule.Length - 2]; + + // NB invert Y axis + var rad = Math.Atan2(-1 * (orientOn.Y - origin.Y), orientOn.X - origin.X); + if (rad < 0) rad += 2 * Math.PI; + var deg = (float) Radians.ToDegrees(rad); + if (deg < 0) deg += 360f; + + var offset = def.IsPrimary ? style.PrimaryLabelOffset : style.SecondaryLabelOffset; + + matrix.Reset(); + + // rotate if required, then apply offsets from origin to top left of text + if (deg <= 90 || deg > 270) + { + // Quadrants 1 & 4 + if (!deg.Equals(0f)) matrix.RotateAt(-deg, origin); + matrix.Translate(offset.X, -offset.Y - labelSize.Height); + } + else + { + // Quadrants 2 & 3 + deg -= 180f; + if (deg < 0) deg += 360; + if (!deg.Equals(0f)) matrix.RotateAt(-deg, origin); + matrix.Translate(-offset.X - labelSize.Width, -offset.Y - labelSize.Height); + } + + g.Transform = matrix; + + if (style.LabelHalo != null) + // Y-1 to centre box around glyph + g.FillRectangle(style.LabelHalo, origin.X, origin.Y - 1, labelSize.Width, labelSize.Height); + + g.DrawString(def.Label, + def.IsPrimary ? style.PrimaryLabelFont : style.SecondaryLabelFont, + def.IsPrimary ? style.PrimaryLabelColor : style.SecondaryLabelColor, + origin); + } + + /// + /// Configure coordinate systems and transformations to be used for constructing graticule lines + /// + /// + private void InitCoordinateSystem(int mapSrid) + { + _srid = mapSrid; + _coordinateSystem = null; + _pcsDomain = null; + _gcsDomain = null; + _unProject = null; + _project = null; + _previousExtents = null; + _pcsUnitSuffix = string.Empty; + + if (_srid == 0) return; + + _coordinateSystem = Session.Instance.CoordinateSystemServices.GetCoordinateSystem(mapSrid); + + switch (_coordinateSystem) + { + case null: + return; + + case IGeographicCoordinateSystem _: + _gcsDomain = GetCrsDomain(_coordinateSystem); + return; + + case IProjectedCoordinateSystem pcs: + _pcsDomain = GetCrsDomain(pcs); + + _gcsDomain = _srid == GeoSpatialMath.WebMercatorSrid + // ok - technically it's 85.06, but for plotting geographic ticks 85 is a nice cutoff + ? new Envelope(-180,180,-85,85) //new Envelope(-180,180,-85.06,85.06) + : GetCrsDomain(pcs.GeographicCoordinateSystem); + + _pcsUnitSuffix = !string.IsNullOrEmpty(pcs.LinearUnit.Abbreviation) ? pcs.LinearUnit.Abbreviation : + !string.IsNullOrEmpty(pcs.LinearUnit.Alias) ? pcs.LinearUnit.Alias : pcs.LinearUnit.Name; + + if (_pcsUnitSuffix == "metre" || _pcsUnitSuffix == "meter") _pcsUnitSuffix = "m"; + + var transform = + Session.Instance.CoordinateSystemServices.CreateTransformation( + pcs.GeographicCoordinateSystem, pcs); + + if (transform == null) return; + + // Basic Project / Un-project transforms + _project = transform.MathTransform; + _unProject = transform.MathTransform.Inverse(); + return; + } + } + + /// + /// Coordinate Reference Domain defining appropriate area of use + /// + /// + /// Crs Domain envelope, or null Envelope if not defined and cannot be derived + private Envelope GetCrsDomain(ICoordinateSystem crs) + { + if (crs.DefaultEnvelope != null && crs.DefaultEnvelope.Length == 4) + // supplied PCS constraints (currently not defined on any coordinate systems) + return new Envelope( + new Coordinate(crs.DefaultEnvelope[0], crs.DefaultEnvelope[1]), + new Coordinate(crs.DefaultEnvelope[2], crs.DefaultEnvelope[3]) + ); + + if (crs.AuthorityCode == GeoSpatialMath.WebMercatorSrid) + return GeoSpatialMath.WebMercatorEnv; + + if (crs is IGeographicCoordinateSystem) + return new Envelope(-180, 180, -90, 90); + + return new Envelope(); + } + + /// + /// Calculate the envelopes used to constructed projected and geographic graticule lines + /// and the clipping polygon to trim lines to exact view extent + /// + /// + /// + private void CalculateMetrics(Graphics g, MapViewport map) + { + _pcsConstrExtents = null; + _gcsConstrExtents = null; + _viewClipPolygon = null; + + _previousExtents = map.Envelope; + _pcsNumSubdivisions = PcsGraticuleStyle.NumSubdivisions; + _gcsNumSubdivisions = GcsGraticuleStyle.NumSubdivisions; + + _mapScale = map.GetMapScale((int) g.DpiX); + + if (_coordinateSystem is IProjectedCoordinateSystem) + { + // pcsConstrExtents is expanded to the next multiple of division + _pcsConstrExtents = CalcPcsConstrExtents(_previousExtents); + + // un-project viewEnv - all 4 corners essential for WebMercator + try + { + var coords = _unProject.TransformList( + new List() + { + _previousExtents.BottomLeft(), + _previousExtents.TopLeft(), + _previousExtents.TopRight(), + _previousExtents.BottomRight() + }); + + _gcsConstrExtents = CalcGcsConstrExtents( + new Envelope( + coords.Min(c => c.X), + coords.Max(c => c.X), + coords.Min(c => c.Y), + coords.Max(c => c.Y) + )); + } + catch (Exception ex) + { + _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); + _logger.Error(ex); + } + } + else + _gcsConstrExtents = CalcGcsConstrExtents(_previousExtents); + + // used to trim graticule lines immediately prior to rendering + _viewClipPolygon = new Polygon(new LinearRing(new[] + { + new Coordinate(map.Center.X - map.Zoom * .5, map.Center.Y - map.MapHeight * .5), + new Coordinate(map.Center.X - map.Zoom * .5, map.Center.Y + map.MapHeight * .5), + new Coordinate(map.Center.X + map.Zoom * .5, map.Center.Y + map.MapHeight * .5), + new Coordinate(map.Center.X + map.Zoom * .5, map.Center.Y - map.MapHeight * .5), + new Coordinate(map.Center.X - map.Zoom * .5, map.Center.Y - map.MapHeight * .5) + } + )); + + if (!map.MapTransformRotation.Equals(0f)) + { + var at = AffineTransformation.RotationInstance( + Degrees.ToRadians(map.MapTransformRotation), map.Center.X, map.Center.Y); + + _viewClipPolygon = (Polygon) at.Transform(_viewClipPolygon); + } + + // special handling for Web Mercator to ensure curved meridian lines are correctly trimmed + if (_srid == GeoSpatialMath.WebMercatorSrid && _viewClipPolygon.Intersects(_webMercatorClipPolygon)) + _viewClipPolygon = (Polygon)_viewClipPolygon.Intersection(_webMercatorClipPolygon); + } + + /// + /// Calculate the primary and secondary intervals based upon the dimensions of + /// + /// + /// Envelope snapped to multiples of the calculated secondary interval + private Envelope CalcPcsConstrExtents(Envelope viewEnv) + { + PcsGraticuleStyle.Division = CalcDivisor(10, PcsPowerRangeMin, PcsPowerRangeMax, + _pcsPreferredMultiples, viewEnv.MinExtent / 2); + PcsGraticuleStyle.Subdivision = PcsGraticuleStyle.Division / PcsGraticuleStyle.NumSubdivisions; + + switch (_srid) + { + case GeoSpatialMath.WebMercatorSrid: + // special handling applying latitude-dependent scale factor + return CalcConstExtentsWebMercator(viewEnv, PcsGraticuleStyle.Subdivision); + default: + // regular rectilinear grid + return CalcConstrExtentsRectilinear(viewEnv, PcsGraticuleStyle.Subdivision); + } + } + + /// + /// Calculate the primary and secondary intervals based upon the dimensions of + /// + /// + /// Envelope snapped to multiples of the calculated secondary interval + private Envelope CalcGcsConstrExtents(Envelope viewEnvDegrees) + { + // special handling for pseudo pole-to-pole data sets that are often trimmed around 85deg N/S + var halfMinExtent = viewEnvDegrees.MinExtent >= 170 ? 90 : viewEnvDegrees.MinExtent / 2; + + GcsGraticuleStyle.Division = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, + _gcsPreferredMultiples, halfMinExtent); + + // 2 degrees with GcsNumSubdivisions = 3 would be a lousy subdivision so.... + // Treat GcsNumSubdivisions as PREFERRED number of subdivisions and determine actual + // number of subdivisions to give sensible units in base 60 (ie deg min sec) + // If GcsNumSubdivisions == 4, then it is better to start at 3 + GcsGraticuleStyle.Subdivision = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, + _gcsPreferredMultiples, GcsGraticuleStyle.Division / + (GcsGraticuleStyle.NumSubdivisions == 4 + ? 3 + : GcsGraticuleStyle.NumSubdivisions)); + + return CalcConstrExtentsRectilinear(viewEnvDegrees, GcsGraticuleStyle.Subdivision); + } + + /// + /// Calculate largest "nice number" increment less than or equal to + /// + /// + /// + /// + /// + /// + /// The secondary interval + private double CalcDivisor(int multiplierBase, int minPower, int maxPower, + double[] preferredMultiples, double maxValue) + { + var candidate = 0d; + for (var y = maxPower; y >= minPower; y--) + { + double multiplier = Math.Pow(multiplierBase, y); + foreach (var niceNumber in preferredMultiples) + { + candidate = niceNumber * multiplier; + + if (candidate <= maxValue) + return candidate; + } + } + + return candidate; + } + + /// + /// Returns envelope expanded to nearest intervals of . + /// Calculated envelope will usually be slightly larger than + /// + /// + /// + /// Envelope snapped to multiples of the given secondary interval + private Envelope CalcConstrExtentsRectilinear(Envelope viewEnv, double secondaryInterval) + { + // Y extents expanded to next increment of secondaryInterval + var minY = Math.Floor(viewEnv.MinY / secondaryInterval) * secondaryInterval; + if (viewEnv.MinY < 0) minY -= secondaryInterval; + + var maxY = Math.Ceiling(viewEnv.MaxY / secondaryInterval) * secondaryInterval; + if (viewEnv.MaxY < 0) maxY += secondaryInterval; + + // X extents expanded to next increment of secondaryInterval + var minX = Math.Floor(viewEnv.MinX / secondaryInterval) * secondaryInterval; + if (viewEnv.MinX < 0) minX -= secondaryInterval; + + var maxX = Math.Ceiling(viewEnv.MaxX / secondaryInterval) * secondaryInterval; + if (viewEnv.MaxX < 0) maxX += secondaryInterval; + + return new Envelope(minX, maxX, minY, maxY); + } + + /// + /// Determine if east-west extents of need to be adjusted to + /// ensure that all scale-corrected meridians within view extent will plot + /// Calculated envelope will often be significantly larger than + /// + /// + /// + /// Envelope snapped to multiples of the given secondary interval + private Envelope CalcConstExtentsWebMercator(Envelope viewEnv, double secondaryInterval) + { + double minX, maxX; + + if (viewEnv.MinX > 0) + // if LHS lies to the RIGHT of central meridian, calculate equatorial X + minX = CalcEquatorialX(new Coordinate(viewEnv.MinX, + Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); + else + minX = viewEnv.MinX; + + if (viewEnv.MaxX < 0) + // if RHS lies to the LEFT of central meridian, calculate equatorial X + maxX = CalcEquatorialX(new Coordinate(viewEnv.MaxX, + Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); + else + maxX = viewEnv.MaxX; + + return CalcConstrExtentsRectilinear(new Envelope(minX, maxX, viewEnv.MinY, viewEnv.MaxY), secondaryInterval); + } + + /// + /// Returns the equivalent X value of this at the equator, + /// taking into account Web Mercator latitude-dependent scale factor. + /// + /// + /// Equatorial X ordinate + private double CalcEquatorialX(Coordinate coord) + { + var scaleFactor = Math.Cosh(Math.Abs(coord.Y) / GeoSpatialMath.WebMercatorRadius); + return coord.X / scaleFactor; + } + + /// + /// Applies the Web Mercator scale factor to the ordinate based upon the latitude dependent ordinate + /// + /// + /// + /// Scale-corrected X ordinate + private double CalcScaleCorrectedX(double x, double y) + { + var scaleFactor = Math.Cosh(Math.Abs(y) / GeoSpatialMath.WebMercatorRadius); + return x * scaleFactor; + } + } +} diff --git a/SharpMap/Rendering/Decoration/GraticuleStyle.cs b/SharpMap/Rendering/Decoration/GraticuleStyle.cs new file mode 100644 index 00000000..bb6fff89 --- /dev/null +++ b/SharpMap/Rendering/Decoration/GraticuleStyle.cs @@ -0,0 +1,407 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using SharpMap.Styles; + +namespace SharpMap.Rendering.Decoration +{ + /// + /// Graticule rendering properties, with Primary (major) and Secondary (minor) intervals. + /// Use , , and + /// to define how a graticule will render, and configure other properties to tune layout and formatting. + /// + public class GraticuleStyle + { + private GraphicsPath _primaryTick; + private GraphicsPath _secondaryTick; + private bool _isDirty = true; + + private int _primaryTickSize = 10; + private int _secondaryTickSize = 5; + + public enum GraticuleTheme + { + Bold, + Subtle, + None + } + + /// + /// Enumeration defining which borders should be labelled + /// + [Flags] + public enum GraticuleDecorationBorders + { + /// + /// No borders + /// + None = 0, + + /// + /// Label Left and Top borders + /// + LeftTop = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top, + + /// + /// Label Left and Bottom borders + /// + LeftBottom = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Bottom, + + /// + /// Label Right and Top borders + /// + RightTop = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Top, + + /// + /// Label Right and Bottom borders + /// + RightBottom = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, + + /// + /// Label all borders + /// + All = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top | MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, + + } + + public enum GraticuleLineStyle + { + /// + /// Do not draw line (or ticks) + /// + None, + + /// + /// Parallels and meridians plot as continuous lines + /// + Continuous, + + /// + /// Plot intersections of parallels and meridians only, using a Solid tick mark + /// + SolidTick, + + /// + /// Plot intersections of parallels and meridians only, using a Hollow tick mark + /// + HollowTick + } + + /// + /// Primary line style + /// Dashed and dotted line styles can be defined using Pen.DashPattern and Pen.DashStyle + /// + public Pen PrimaryPen { get; set; } = new Pen(Brushes.DarkSlateGray, 2); + + /// + /// Line / tick style for primary graticule, or GraticuleLineStyle.None to disable this GraticuleStyle + /// + public GraticuleLineStyle PrimaryLineStyle { get; set; } = GraticuleLineStyle.SolidTick; + + /// + /// Size of tick (pixels) at intersection of primary graticule lines + /// + public int PrimaryTickSize + { + get => _primaryTickSize; + set + { + _primaryTickSize = value; + _isDirty = true; + } + } + + /// + /// Custom cross-hair style tick (design your own), null to use + /// + public GraphicsPath PrimaryCustomTick { get; set; } + + /// + /// Length (pixels) of edge cuts (ie where graticule intersects border) or zero for none + /// + public int PrimaryMargin { get; set; } = 10; + + /// + /// Secondary line style. + /// Dashed and dotted line styles can be defined using Pen.DashPattern and Pen.DashStyle + /// + public Pen SecondaryPen { get; set; } = new Pen(Brushes.LightGray, 1); + + /// + /// Line / tick style for secondary graticule, or GraticuleLineStyle.None to disable Secondary units + /// + public GraticuleLineStyle SecondaryLineStyle { get; set; } = GraticuleLineStyle.None; + + /// + /// Size of tick (pixels) at intersection of secondary graticule lines + /// + public int SecondaryTickSize + { + get => _secondaryTickSize; + set + { + _secondaryTickSize = value; + _isDirty = true; + } + } + + /// + /// Custom cross-hair style tick (design your own), or null to use + /// + public GraphicsPath SecondaryCustomTick { get; set; } + + /// + /// Length (pixels) of edge cuts (ie where graticule intersects border) or zero for none + /// + public int SecondaryMargin { get; set; } = 5; + + /// + /// Edges to be labelled, taking into account any map rotation + /// + public GraticuleDecorationBorders LabelBorders { get; set; } = GraticuleDecorationBorders.LeftBottom; + + /// + /// Font for labelling primary graticule lines + /// + public Font PrimaryLabelFont { get; set; } = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular); + + /// + /// Primary label color + /// + public Brush PrimaryLabelColor { get; set; } = Brushes.DarkSlateGray; + + /// + /// Offset to lower-left corner of label position relative to graticule intersection with border. + /// Positive X offset is applied along the graticule line. + /// Positive Y offset is applied perpendicular to graticule line. + /// An offset of (2,2) will draw the label just inside the border, sitting just above the graticule. + /// To position label on extension of edge cut, set X = and Y = negative half height + /// + public Point PrimaryLabelOffset { get; set; } = new Point(2, 2); + + /// + /// Font for labelling secondary graticule lines + /// + public Font SecondaryLabelFont { get; set; } = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular); + + /// + /// Secondary label color + /// + public Brush SecondaryLabelColor { get; set; } = Brushes.DarkSlateGray; + + /// + /// Offset to lower-left corner of label position relative to graticule intersection with border. + /// Positive X offset is applied along the graticule line. + /// Positive Y offset is applied perpendicular to graticule line. + /// An offset of (2,2) will draw the label just inside the border, sitting just above the graticule. + /// To position label on extension of edge cut, set X = and Y = negative half height + /// + public Point SecondaryLabelOffset { get; set; } = new Point(2, 2); + + /// + /// True if secondary edge cuts (ie subdivisions) should be labelled in addition to primary labels (ie division)/> + /// + public bool LabelSubdivisions { get; set; } + + /// + /// Background color to assist reading labels, or null for no halo + /// + public Brush LabelHalo { get; set; } + + /// + /// Interval between Primary graticule lines (calculated to provide at least 2 cuts along shortest border) + /// + public double Division { get; internal set; } + + /// + /// Interval between Secondary graticule lines, derived from Division and NumSubdivisions + /// + public double Subdivision { get; internal set; } + + /// + /// Number of intervals to appear between Primary graticule lines (or zero to disable Secondary graticule) + /// + public int NumSubdivisions { get; set; } = 4; + + /// + /// Minimum visible zoom level for rendering, or zero for not applicable + /// + public double MinVisible { get; set; } = 0; + + /// + /// Maximum visible zoom level for rendering, or double.MaxValue for not applicable + /// + public double MaxVisible { get; set; } = double.MaxValue; + + /// + /// Gets or Sets what level-reference the Min/Max values are defined in + /// + public VisibilityUnits VisibilityUnits { get; set; } = VisibilityUnits.Scale; + + public GraticuleStyle() + { + } + + /// + /// Quickly style a graticule without configuring each individual property + /// + /// + /// + /// + /// + public GraticuleStyle(GraticuleTheme theme, + GraticuleLineStyle lineStyle, + bool withSecondaryIntervals, + GraticuleDecorationBorders labelBorders) : this() + { + switch (theme) + { + case GraticuleTheme.Bold: + + PrimaryPen = new Pen(Brushes.DarkSlateGray, 2); + PrimaryLineStyle = lineStyle; + PrimaryTickSize = 16; + PrimaryMargin = 10; + + SecondaryPen = new Pen(Brushes.LightSlateGray, 1); + SecondaryLineStyle = lineStyle; + SecondaryTickSize = 10; + SecondaryMargin = 6; + + NumSubdivisions = 4; + + PrimaryLabelFont = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular); + PrimaryLabelColor = Brushes.DarkSlateGray; + PrimaryLabelOffset = new Point(2, 1); + + SecondaryLabelFont = new Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular); + SecondaryLabelColor = Brushes.LightSlateGray; + SecondaryLabelOffset = new Point(2, 1); + + LabelBorders = labelBorders; + LabelHalo = Brushes.AliceBlue; + LabelSubdivisions = true; + + break; + + + default: + + PrimaryPen = new Pen(Brushes.Gray, 2); + PrimaryLineStyle = lineStyle; + PrimaryTickSize = 10; + PrimaryMargin = 8; + + SecondaryPen = new Pen(Brushes.LightGray, 1); + SecondaryLineStyle = lineStyle; + SecondaryTickSize = 6; + SecondaryMargin = 4; + + NumSubdivisions = 4; + + PrimaryLabelFont = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular); + PrimaryLabelColor = Brushes.Gray; + PrimaryLabelOffset = new Point(PrimaryMargin + 1, -1 - PrimaryLabelFont.Height / 2); + + SecondaryLabelFont = new Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular); + SecondaryLabelColor = Brushes.LightGray; + SecondaryLabelOffset = new Point(SecondaryMargin + 1, -1 - SecondaryLabelFont.Height/2 ); + + LabelBorders = labelBorders; + LabelHalo = Brushes.Gainsboro; // Brushes.PowderBlue; + LabelSubdivisions = true; + + break; + } + + if (theme == GraticuleTheme.None) + PrimaryLineStyle = GraticuleLineStyle.None; + + if (!withSecondaryIntervals) + SecondaryLineStyle = GraticuleLineStyle.None; + } + + /// + /// Returns true if a primary or secondary tick is required for given combination of primary and secondary meridians and parallels + /// + public bool IsTickRequired(bool isPrimaryMeridian, bool isPrimaryParallel) + { + if (isPrimaryMeridian && isPrimaryParallel) + return PrimaryLineStyle == GraticuleLineStyle.SolidTick || + PrimaryLineStyle == GraticuleLineStyle.HollowTick; + else + return SecondaryLineStyle == GraticuleLineStyle.SolidTick || + SecondaryLineStyle == GraticuleLineStyle.HollowTick; + } + + /// + /// Returns the appropriate tick + /// + public GraphicsPath GetTick(bool isPrimaryTick) + { + if (PrimaryCustomTick != null && isPrimaryTick) return PrimaryCustomTick; + if (SecondaryCustomTick != null && !isPrimaryTick) return SecondaryCustomTick; + + if (_isDirty) + { + _primaryTick = CreateTick(PrimaryTickSize, PrimaryLineStyle); + _secondaryTick = CreateTick(SecondaryMargin, SecondaryLineStyle); + _isDirty = false; + } + + return isPrimaryTick ? _primaryTick : _secondaryTick; + } + + /// + /// Create a simple tick (cross) symbol + /// + private GraphicsPath CreateTick(int primaryTickSize, GraticuleLineStyle lineStyle) + { + if (lineStyle == GraticuleLineStyle.None + || lineStyle == GraticuleLineStyle.Continuous) + return null; + + PointF[] points; + + var tickSize50 = primaryTickSize * 0.5f; + var tickSize20 = primaryTickSize * 0.2f; + + switch (lineStyle) + { + case GraticuleLineStyle.SolidTick: + points = new PointF[4]; + points[0] = new PointF(-tickSize50, 0); + points[1] = new PointF(tickSize50, 0); + points[2] = new PointF(0, -tickSize50); + points[3] = new PointF(0, tickSize50); + + break; + case GraticuleLineStyle.HollowTick: + points = new PointF[8]; + points[0] = new PointF(-tickSize50, 0); + points[1] = new PointF(-tickSize20, 0); + points[2] = new PointF(tickSize20, 0); + points[3] = new PointF(tickSize50, 0); + + points[4] = new PointF(0,-tickSize50); + points[5] = new PointF(0,-tickSize20); + points[6] = new PointF(0,tickSize20); + points[7] = new PointF(0,tickSize50); + break; + + default: + return null; + } + + var gp = new GraphicsPath(); + for (var i = 0; i < points.Length; i += 2) + { + gp.StartFigure(); + gp.AddLine(points[i], points[i+1]); + } + + return gp; + } + + } +} From a39e8bb084e27546929fd667c0090c65875f77e6 Mon Sep 17 00:00:00 2001 From: Tim C Date: Wed, 17 Jul 2019 14:14:59 +0700 Subject: [PATCH 098/186] Fix FormMapBox overlapping controls and move non-designer code to code-behind --- .../WinFormSamples/FormMapBox.Designer.cs | 1369 +++++++---------- Examples/WinFormSamples/FormMapBox.cs | 641 ++++++-- Examples/WinFormSamples/FormMapBox.resx | 271 ++-- 3 files changed, 1142 insertions(+), 1139 deletions(-) diff --git a/Examples/WinFormSamples/FormMapBox.Designer.cs b/Examples/WinFormSamples/FormMapBox.Designer.cs index c1dc710c..08720984 100644 --- a/Examples/WinFormSamples/FormMapBox.Designer.cs +++ b/Examples/WinFormSamples/FormMapBox.Designer.cs @@ -1,844 +1,525 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using SharpMap.Data; -using SharpMap.Rendering.Decoration; -using SharpMap.Forms; -using WinFormSamples.Samples; - -namespace WinFormSamples -{ - partial class FormMapBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.scMain = new System.Windows.Forms.SplitContainer(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.scMapProp = new System.Windows.Forms.SplitContainer(); - this.tbAngle = new System.Windows.Forms.TrackBar(); - this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); - this.btnTool2 = new System.Windows.Forms.Button(); - this.btnTool = new System.Windows.Forms.Button(); - this.mapBox1 = new SharpMap.Forms.MapBox(); - this.mapDigitizeGeometriesToolStrip1 = new SharpMap.Forms.ToolBar.MapDigitizeGeometriesToolStrip(this.components); - this.mapVariableLayerToolStrip1 = new SharpMap.Forms.ToolBar.MapVariableLayerToolStrip(this.components); - this.mapQueryToolStrip1 = new SharpMap.Forms.ToolBar.MapQueryToolStrip(this.components); - this.mapZoomToolStrip1 = new SharpMap.Forms.ToolBar.MapZoomToolStrip(this.components); - this.pgMap = new System.Windows.Forms.PropertyGrid(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.radioButton4 = new System.Windows.Forms.RadioButton(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.radioButton5 = new System.Windows.Forms.RadioButton(); - this.radioButton6 = new System.Windows.Forms.RadioButton(); - this.radioButton7 = new System.Windows.Forms.RadioButton(); - this.radioButton8 = new System.Windows.Forms.RadioButton(); - this.radioButton9 = new System.Windows.Forms.RadioButton(); - this.radioButton12 = new System.Windows.Forms.RadioButton(); - this.radioButton10 = new System.Windows.Forms.RadioButton(); - this.radioButton11 = new System.Windows.Forms.RadioButton(); - this.btnCreateTiles = new System.Windows.Forms.Button(); - this.lvwDecorations = new System.Windows.Forms.ListView(); - this.pgMapDecoration = new System.Windows.Forms.PropertyGrid(); - this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); - this.scMain.Panel2.SuspendLayout(); - this.scMain.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.scMapProp)).BeginInit(); - this.scMapProp.Panel1.SuspendLayout(); - this.scMapProp.Panel2.SuspendLayout(); - this.scMapProp.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.tbAngle)).BeginInit(); - this.toolStripContainer1.ContentPanel.SuspendLayout(); - this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); - this.toolStripContainer1.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // scMain - // - this.scMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.scMain.Location = new System.Drawing.Point(174, 0); - this.scMain.Name = "scMain"; - this.scMain.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // scMain.Panel2 - // - this.scMain.Panel2.Controls.Add(this.dataGridView1); - this.scMain.Size = new System.Drawing.Size(892, 648); - this.scMain.SplitterDistance = 458; - this.scMain.TabIndex = 4; - // - // dataGridView1 - // - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridView1.Location = new System.Drawing.Point(0, 0); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.Size = new System.Drawing.Size(892, 186); - this.dataGridView1.TabIndex = 4; - // - // scMapProp - // - this.scMapProp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.scMapProp.Location = new System.Drawing.Point(174, 3); - this.scMapProp.Name = "scMapProp"; - // - // scMapProp.Panel1 - // - this.scMapProp.Panel1.Controls.Add(this.tbAngle); - this.scMapProp.Panel1.Controls.Add(this.toolStripContainer1); - this.scMapProp.Panel1.SizeChanged += new System.EventHandler(this.mapImage_SizeChanged); - // - // scMapProp.Panel2 - // - this.scMapProp.Panel2.Controls.Add(this.pgMap); - this.scMapProp.Size = new System.Drawing.Size(892, 462); - this.scMapProp.SplitterDistance = 651; - this.scMapProp.TabIndex = 2; - // - // tbAngle - // - this.tbAngle.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tbAngle.Location = new System.Drawing.Point(0, 417); - this.tbAngle.Maximum = 180; - this.tbAngle.Minimum = -180; - this.tbAngle.Name = "tbAngle"; - this.tbAngle.Size = new System.Drawing.Size(651, 45); - this.tbAngle.TabIndex = 5; - this.tbAngle.TickFrequency = 15; - this.tbAngle.Scroll += new System.EventHandler(this.tbAngle_Scroll); - // - // toolStripContainer1 - // - // - // toolStripContainer1.ContentPanel - // - this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool2); - this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool); - this.toolStripContainer1.ContentPanel.Controls.Add(this.mapBox1); - this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(651, 387); - this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); - this.toolStripContainer1.Name = "toolStripContainer1"; - this.toolStripContainer1.Size = new System.Drawing.Size(651, 462); - this.toolStripContainer1.TabIndex = 7; - this.toolStripContainer1.Text = "toolStripContainer1"; - // - // toolStripContainer1.TopToolStripPanel - // - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapDigitizeGeometriesToolStrip1); - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapVariableLayerToolStrip1); - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapQueryToolStrip1); - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapZoomToolStrip1); - // - // btnTool2 - // - this.btnTool2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnTool2.Location = new System.Drawing.Point(595, 32); - this.btnTool2.Name = "btnTool2"; - this.btnTool2.Size = new System.Drawing.Size(53, 23); - this.btnTool2.TabIndex = 9; - this.btnTool2.Text = "Magnify"; - this.btnTool2.UseVisualStyleBackColor = true; - this.btnTool2.Click += new System.EventHandler(this.btnTool_Click); - // - // btnTool - // - this.btnTool.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnTool.Location = new System.Drawing.Point(595, 3); - this.btnTool.Name = "btnTool"; - this.btnTool.Size = new System.Drawing.Size(53, 23); - this.btnTool.TabIndex = 8; - this.btnTool.Text = "Hover"; - this.btnTool.UseVisualStyleBackColor = true; - this.btnTool.Click += new System.EventHandler(this.btnTool_Click); - // - // mapBox1 - // - this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; - this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; - this.mapBox1.CustomTool = null; - this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.mapBox1.FineZoomFactor = 10D; - this.mapBox1.Location = new System.Drawing.Point(0, 0); - this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; - this.mapBox1.Name = "mapBox1"; - this.mapBox1.QueryGrowFactor = 5F; - this.mapBox1.QueryLayerIndex = 0; - this.mapBox1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); - this.mapBox1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); - this.mapBox1.ShowProgressUpdate = true; - this.mapBox1.Size = new System.Drawing.Size(651, 387); - this.mapBox1.TabIndex = 7; - this.mapBox1.Text = "mapBox1"; - this.mapBox1.WheelZoomMagnitude = 2D; - this.mapBox1.MapRefreshed += new System.EventHandler(this.mapImage_MapRefreshed); - this.mapBox1.MapZoomChanged += new SharpMap.Forms.MapBox.MapZoomHandler(this.mapImage_MapZoomChanged); - this.mapBox1.MapZooming += new SharpMap.Forms.MapBox.MapZoomHandler(this.mapImage_MapZooming); - this.mapBox1.MapQueried += new SharpMap.Forms.MapBox.MapQueryHandler(this.mapBox1_OnMapQueried); - this.mapBox1.MapQueryStarted += new System.EventHandler(this.mapBox1_MapQueryStarted); - this.mapBox1.MapQueryDone += new System.EventHandler(this.mapBox1_MapQueryEnded); - this.mapBox1.MapCenterChanged += new SharpMap.Forms.MapBox.MapCenterChangedHandler(this.mapImage_MapCenterChanged); - this.mapBox1.ActiveToolChanged += new SharpMap.Forms.MapBox.ActiveToolChangedHandler(this.mapImage_ActiveToolChanged); - this.mapBox1.SizeChanged += new System.EventHandler(this.mapImage_SizeChanged); - // - // mapDigitizeGeometriesToolStrip1 - // - this.mapDigitizeGeometriesToolStrip1.Dock = System.Windows.Forms.DockStyle.None; - this.mapDigitizeGeometriesToolStrip1.Enabled = false; - this.mapDigitizeGeometriesToolStrip1.Location = new System.Drawing.Point(40, 0); - this.mapDigitizeGeometriesToolStrip1.MapControl = this.mapBox1; - this.mapDigitizeGeometriesToolStrip1.Name = "mapDigitizeGeometriesToolStrip1"; - this.mapDigitizeGeometriesToolStrip1.Size = new System.Drawing.Size(110, 25); - this.mapDigitizeGeometriesToolStrip1.TabIndex = 9; - // - // mapVariableLayerToolStrip1 - // - this.mapVariableLayerToolStrip1.Dock = System.Windows.Forms.DockStyle.None; - this.mapVariableLayerToolStrip1.Enabled = false; - this.mapVariableLayerToolStrip1.Location = new System.Drawing.Point(3, 25); - this.mapVariableLayerToolStrip1.MapControl = this.mapBox1; - this.mapVariableLayerToolStrip1.Name = "mapVariableLayerToolStrip1"; - this.mapVariableLayerToolStrip1.Size = new System.Drawing.Size(137, 25); - this.mapVariableLayerToolStrip1.TabIndex = 10; - // - // mapQueryToolStrip1 - // - this.mapQueryToolStrip1.Dock = System.Windows.Forms.DockStyle.None; - this.mapQueryToolStrip1.Enabled = false; - this.mapQueryToolStrip1.Location = new System.Drawing.Point(140, 25); - this.mapQueryToolStrip1.MapControl = this.mapBox1; - this.mapQueryToolStrip1.Name = "mapQueryToolStrip1"; - this.mapQueryToolStrip1.Size = new System.Drawing.Size(216, 25); - this.mapQueryToolStrip1.TabIndex = 8; - this.mapQueryToolStrip1.Text = "mapQueryToolStrip1"; - // - // mapZoomToolStrip1 - // - this.mapZoomToolStrip1.Dock = System.Windows.Forms.DockStyle.None; - this.mapZoomToolStrip1.Enabled = false; - this.mapZoomToolStrip1.Location = new System.Drawing.Point(3, 50); - this.mapZoomToolStrip1.MapControl = this.mapBox1; - this.mapZoomToolStrip1.Name = "mapZoomToolStrip1"; - this.mapZoomToolStrip1.Size = new System.Drawing.Size(408, 25); - this.mapZoomToolStrip1.TabIndex = 8; - this.mapZoomToolStrip1.Text = "mapZoomToolStrip1"; - // - // pgMap - // - this.pgMap.Dock = System.Windows.Forms.DockStyle.Fill; - this.pgMap.Location = new System.Drawing.Point(0, 0); - this.pgMap.Name = "pgMap"; - this.pgMap.SelectedObject = this.mapBox1; - this.pgMap.Size = new System.Drawing.Size(237, 462); - this.pgMap.TabIndex = 3; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.Controls.Add(this.radioButton2); - this.flowLayoutPanel1.Controls.Add(this.radioButton3); - this.flowLayoutPanel1.Controls.Add(this.radioButton4); - this.flowLayoutPanel1.Controls.Add(this.radioButton1); - this.flowLayoutPanel1.Controls.Add(this.radioButton5); - this.flowLayoutPanel1.Controls.Add(this.radioButton6); - this.flowLayoutPanel1.Controls.Add(this.radioButton7); - this.flowLayoutPanel1.Controls.Add(this.radioButton8); - this.flowLayoutPanel1.Controls.Add(this.radioButton9); - this.flowLayoutPanel1.Controls.Add(this.radioButton12); - this.flowLayoutPanel1.Controls.Add(this.radioButton10); - this.flowLayoutPanel1.Controls.Add(this.radioButton11); - this.flowLayoutPanel1.Controls.Add(this.btnCreateTiles); - this.flowLayoutPanel1.Controls.Add(this.lvwDecorations); - this.flowLayoutPanel1.Controls.Add(this.pgMapDecoration); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 4, 4, 4); - this.flowLayoutPanel1.Size = new System.Drawing.Size(171, 648); - this.flowLayoutPanel1.TabIndex = 5; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Checked = true; - this.radioButton2.Location = new System.Drawing.Point(13, 7); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(69, 17); - this.radioButton2.TabIndex = 0; - this.radioButton2.TabStop = true; - this.radioButton2.Text = "Shapefile"; - this.radioButton2.UseVisualStyleBackColor = true; - this.radioButton2.Click += new System.EventHandler(this.radioButton_Click); - this.radioButton2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); - // - // radioButton3 - // - this.radioButton3.AutoSize = true; - this.radioButton3.Location = new System.Drawing.Point(13, 30); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(98, 17); - this.radioButton3.TabIndex = 1; - this.radioButton3.Text = "GradientTheme"; - this.radioButton3.UseVisualStyleBackColor = true; - this.radioButton3.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton4 - // - this.radioButton4.AutoSize = true; - this.radioButton4.Location = new System.Drawing.Point(13, 53); - this.radioButton4.Name = "radioButton4"; - this.radioButton4.Size = new System.Drawing.Size(81, 17); - this.radioButton4.TabIndex = 3; - this.radioButton4.Text = "WMS Client"; - this.radioButton4.UseVisualStyleBackColor = true; - this.radioButton4.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Location = new System.Drawing.Point(13, 76); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(78, 17); - this.radioButton1.TabIndex = 2; - this.radioButton1.Text = "WFS Client"; - this.radioButton1.UseVisualStyleBackColor = true; - this.radioButton1.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton5 - // - this.radioButton5.AutoSize = true; - this.radioButton5.Location = new System.Drawing.Point(13, 99); - this.radioButton5.Name = "radioButton5"; - this.radioButton5.Size = new System.Drawing.Size(97, 17); - this.radioButton5.TabIndex = 4; - this.radioButton5.Text = "OGR - MapInfo"; - this.radioButton5.UseVisualStyleBackColor = true; - this.radioButton5.Click += new System.EventHandler(this.radioButton_Click); - this.radioButton5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); - // - // radioButton6 - // - this.radioButton6.AutoSize = true; - this.radioButton6.Location = new System.Drawing.Point(13, 122); - this.radioButton6.Name = "radioButton6"; - this.radioButton6.Size = new System.Drawing.Size(98, 17); - this.radioButton6.TabIndex = 4; - this.radioButton6.Text = "GDAL - GeoTiff"; - this.radioButton6.UseVisualStyleBackColor = true; - this.radioButton6.Click += new System.EventHandler(this.radioButton_Click); - this.radioButton6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); - // - // radioButton7 - // - this.radioButton7.AutoSize = true; - this.radioButton7.Location = new System.Drawing.Point(13, 145); - this.radioButton7.Name = "radioButton7"; - this.radioButton7.Size = new System.Drawing.Size(101, 17); - this.radioButton7.TabIndex = 5; - this.radioButton7.Text = "TileLayer - OSM"; - this.radioButton7.UseVisualStyleBackColor = true; - this.radioButton7.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton8 - // - this.radioButton8.AutoSize = true; - this.radioButton8.Location = new System.Drawing.Point(13, 168); - this.radioButton8.Name = "radioButton8"; - this.radioButton8.Size = new System.Drawing.Size(61, 17); - this.radioButton8.TabIndex = 6; - this.radioButton8.Text = "PostGis"; - this.radioButton8.UseVisualStyleBackColor = true; - this.radioButton8.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton9 - // - this.radioButton9.AutoSize = true; - this.radioButton9.Location = new System.Drawing.Point(13, 191); - this.radioButton9.Name = "radioButton9"; - this.radioButton9.Size = new System.Drawing.Size(72, 17); - this.radioButton9.TabIndex = 7; - this.radioButton9.Text = "SpatiaLite"; - this.radioButton9.UseVisualStyleBackColor = true; - this.radioButton9.Click += new System.EventHandler(this.radioButton_Click); - this.radioButton9.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); - // - // radioButton12 - // - this.radioButton12.AutoSize = true; - this.radioButton12.Location = new System.Drawing.Point(13, 214); - this.radioButton12.Name = "radioButton12"; - this.radioButton12.Size = new System.Drawing.Size(71, 17); - this.radioButton12.TabIndex = 13; - this.radioButton12.Text = "SqlServer"; - this.radioButton12.UseVisualStyleBackColor = true; - this.radioButton12.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton10 - // - this.radioButton10.AutoSize = true; - this.radioButton10.Location = new System.Drawing.Point(13, 237); - this.radioButton10.Name = "radioButton10"; - this.radioButton10.Size = new System.Drawing.Size(105, 17); - this.radioButton10.TabIndex = 9; - this.radioButton10.Text = "shp_TextOnPath"; - this.radioButton10.UseVisualStyleBackColor = true; - this.radioButton10.Click += new System.EventHandler(this.radioButton_Click); - // - // radioButton11 - // - this.radioButton11.AutoSize = true; - this.radioButton11.Location = new System.Drawing.Point(13, 260); - this.radioButton11.Name = "radioButton11"; - this.radioButton11.Size = new System.Drawing.Size(96, 17); - this.radioButton11.TabIndex = 12; - this.radioButton11.Text = "GdiImageLayer"; - this.radioButton11.UseVisualStyleBackColor = true; - this.radioButton11.Click += new System.EventHandler(this.radioButton_Click); - // - // btnCreateTiles - // - this.btnCreateTiles.Location = new System.Drawing.Point(13, 283); - this.btnCreateTiles.Name = "btnCreateTiles"; - this.btnCreateTiles.Size = new System.Drawing.Size(147, 23); - this.btnCreateTiles.TabIndex = 11; - this.btnCreateTiles.Text = "Create tiles"; - this.btnCreateTiles.UseVisualStyleBackColor = true; - this.btnCreateTiles.Click += new System.EventHandler(this.btnCreateTiles_Click); - // - // lvwDecorations - // - this.lvwDecorations.CheckBoxes = true; - this.lvwDecorations.Location = new System.Drawing.Point(13, 312); - this.lvwDecorations.MultiSelect = false; - this.lvwDecorations.Name = "lvwDecorations"; - this.lvwDecorations.Size = new System.Drawing.Size(147, 58); - this.lvwDecorations.TabIndex = 4; - this.lvwDecorations.UseCompatibleStateImageBehavior = false; - this.lvwDecorations.View = System.Windows.Forms.View.List; - this.lvwDecorations.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lvwDecorations_ItemChecked); - this.lvwDecorations.SelectedIndexChanged += new System.EventHandler(this.lvwDecorations_SelectedIndexChanged); - // - // pgMapDecoration - // - this.pgMapDecoration.Anchor = System.Windows.Forms.AnchorStyles.None; - this.pgMapDecoration.Location = new System.Drawing.Point(15, 376); - this.pgMapDecoration.Name = "pgMapDecoration"; - this.pgMapDecoration.SelectedObject = this.lvwDecorations; - this.pgMapDecoration.Size = new System.Drawing.Size(143, 262); - this.pgMapDecoration.TabIndex = 9; - // - // FormMapBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1066, 648); - this.Controls.Add(this.scMapProp); - this.Controls.Add(this.flowLayoutPanel1); - this.Controls.Add(this.scMain); - this.Name = "FormMapBox"; - this.Text = "SharpMap Samples - MapBox"; - this.scMain.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit(); - this.scMain.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.scMapProp.Panel1.ResumeLayout(false); - this.scMapProp.Panel1.PerformLayout(); - this.scMapProp.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.scMapProp)).EndInit(); - this.scMapProp.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.tbAngle)).EndInit(); - this.toolStripContainer1.ContentPanel.ResumeLayout(false); - this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); - this.toolStripContainer1.TopToolStripPanel.PerformLayout(); - this.toolStripContainer1.ResumeLayout(false); - this.toolStripContainer1.PerformLayout(); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - void mapBox1_MapQueryStarted(object sender, EventArgs e) - { - dataGridView1.DataSource = _queriedData = null; - } - - void mapBox1_MapQueryEnded(object sender, EventArgs e) - { - if (_queriedData != null && _queriedData.Tables.Count > 0) - dataGridView1.DataSource = _queriedData.Tables[0]; - } - - private FeatureDataSet _queriedData; - private void mapBox1_OnMapQueried(FeatureDataTable data) - { - if (_queriedData == null) - _queriedData = new FeatureDataSet(); - _queriedData.Tables.Add(data); - } - - #endregion - - private System.Windows.Forms.SplitContainer scMain; - private System.Windows.Forms.DataGridView dataGridView1; - private FormSqlServerOpts formSqlServerOpts = null; - - private void radioButton_Click(object sender, EventArgs e) - { - Cursor mic = mapBox1.Cursor; - mapBox1.Cursor = Cursors.WaitCursor; - Cursor = Cursors.WaitCursor; - - if (formSqlServerOpts != null) - { - formSqlServerOpts.Close(); - formSqlServerOpts = null; - } - - try - { - //mapImage.ActiveTool = MapImage.Tools.None; - string text = ((RadioButton)sender).Text; - - switch (text) - { - case "Shapefile": - mapBox1.Map = ShapefileSample.InitializeMap(tbAngle.Value); - break; - case "GradientTheme": - mapBox1.Map = GradiantThemeSample.InitializeMap(tbAngle.Value); - break; - case "WFS Client": - mapBox1.Map = WfsSample.InitializeMap(tbAngle.Value); - break; - case "WMS Client": - //mapBox1.Map = TiledWmsSample.InitializeMap(); - mapBox1.Map = WmsSample.InitializeMap(tbAngle.Value); - break; - case "OGR - MapInfo": - case "OGR - S-57": - mapBox1.Map = OgrSample.InitializeMap(tbAngle.Value); - break; - case "GDAL - GeoTiff": - case "GDAL - '.DEM'": - case "GDAL - '.ASC'": - case "GDAL - '.VRT'": - mapBox1.Map = GdalSample.InitializeMap(tbAngle.Value); - mapBox1.ActiveTool = MapBox.Tools.Pan; - break; - case "TileLayer - OSM": - case "TileLayer - OSM with XLS": - case "TileLayer - Bing Roads": - case "TileLayer - Bing Aerial": - case "TileLayer - Bing Hybrid": - case "TileLayer - GoogleMap": - case "TileLayer - GoogleSatellite": - case "TileLayer - GoogleTerrain": - case "TileLayer - GoogleLabels": - case "Eniro": - /* - tbAngle.Visible = text.Equals("TileLayer - GoogleLabels"); - if (!tbAngle.Visible) tbAngle.Value = 0; - */ - mapBox1.Map = TileLayerSample.InitializeMap(tbAngle.Value); - ((RadioButton)sender).Text = (mapBox1.Map.BackgroundLayer.Count > 0) - ? ((RadioButton)sender).Text = mapBox1.Map.BackgroundLayer[0].LayerName - : ((RadioButton)sender).Text = mapBox1.Map.Layers[0].LayerName; - break; - case "PostGis": - mapBox1.Map = PostGisSample.InitializeMap(tbAngle.Value); - break; - case "SpatiaLite": - mapBox1.Map = SpatiaLiteSample.InitializeMap(tbAngle.Value); - break; - case "SqlServer": - // create empty map with BruTile basemap - mapBox1.Map = SqlServerSample.InitializeMap(tbAngle.Value); - // check conn string - var connStrBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder(Properties.Settings.Default.SqlServerConnectionString); - if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) - { - mapBox1.Refresh(); - - MessageBox.Show("Requires SqlServer connection string to be defined (Project / Settings)\n\n" + - "Also, if project folder SqlServerTypes\\x64 and \\x86 are empty, then force reinstall of NuGet package:\n\n" + - "PM> Update-Package Microsoft.SqlServer.Types -ProjectName Examples\\WinFormSamples -reinstall -ignoreDependencies","Sql Server", - MessageBoxButtons.OK,MessageBoxIcon.Information); - - return; - } - // now show SqlServer dialog - formSqlServerOpts = new FormSqlServerOpts() - { - MapBox = mapBox1, - ConnectionString = connStrBuilder.ToString() - }; - formSqlServerOpts.Show(this); - break; - case "Oracle": - mapBox1.Map = OracleSample.InitializeMap(tbAngle.Value); - break; - case "shp_TextOnPath": - mapBox1.Map = TextOnPathSample.InitializeMapOrig(tbAngle.Value); - break; - case "GdiImageLayer": - mapBox1.Map = GdiImageLayerSample.InitializeMap(tbAngle.Value); - break; - default: - break; - } - - //Add checked Map decorations - foreach (ListViewItem checkedItem in lvwDecorations.CheckedItems) - { - Type mdType; - if (MapDecorationTypes.TryGetValue(checkedItem.Text, out mdType)) - { - IMapDecoration md = Activator.CreateInstance(mdType) as IMapDecoration; - mapBox1.Map.Decorations.Add(md); - } - } - - mapBox1.Map.Size = Size; - mapBox1.Refresh(); - } - catch (Exception ex) - { - MessageBox.Show(this, ex.Message, "Error"); - } - Cursor = Cursors.Default; - mapBox1.Cursor = mic; - } - - private void mapImage_ActiveToolChanged(MapBox.Tools tool) - { - UpdatePropertyGrid(); - } - - private void mapImage_MapCenterChanged(GeoAPI.Geometries.Coordinate center) - { - UpdatePropertyGrid(); - } - - private void mapImage_MapRefreshed(object sender, EventArgs e) - { - UpdatePropertyGrid(); - } - - private void mapImage_MapZoomChanged(double zoom) - { - UpdatePropertyGrid(); - Console.WriteLine("Current Extents: {0}", mapBox1.Map.Envelope); - } - - private void mapImage_MapZooming(double zoom) - { - UpdatePropertyGrid(); - } - - private void mapImage_SizeChanged(object sender, EventArgs e) - { - mapBox1.Refresh(); - } - - private void tbAngle_Scroll(object sender, EventArgs e) - { - System.Drawing.Drawing2D.Matrix matrix = new Matrix(); - if (tbAngle.Value != 0f) - matrix.RotateAt(tbAngle.Value, new PointF(mapBox1.Width * 0.5f, mapBox1.Height * 0.5f)); - - mapBox1.Map.MapTransform = matrix; - AdjustRotation(mapBox1.Map.Layers, tbAngle.Value); - AdjustRotation(mapBox1.Map.VariableLayers, tbAngle.Value); - - mapBox1.Refresh(); - } - - private void radioButton2_MouseUp(object sender, MouseEventArgs e) - { - var rb = sender as RadioButton; - if (rb == null) return; - - if (e.Button != MouseButtons.Right) return; - - SharpMap.Map map = null; - switch (rb.Name) - { - case "radioButton2": // ShapeFile - map = Samples.ShapefileSample.InitializeMap(tbAngle.Value, GetOpenFileName("Shapefile|*.shp")); - break; - case "radioButton5": // Ogr - map = Samples.OgrSample.InitializeMap(tbAngle.Value, GetOpenFileName("Ogr Datasource|*.*")); - break; - case "radioButton6": // Gdal - map = Samples.GdalSample.InitializeMap(tbAngle.Value, GetOpenFileName("Gdal Datasource|*.*")); - break; - case "radioButton9": // spatialite - map = Samples.SpatiaLiteSample.InitializeMap(tbAngle.Value, GetOpenFileName("SpatiaLite 2|*.db;*.sqlite")); - break; - } - - if (map == null) - return; - - - //Add checked Map decorations - foreach (ListViewItem checkedItem in lvwDecorations.CheckedItems) - { - Type mdType; - if (MapDecorationTypes.TryGetValue(checkedItem.Text, out mdType)) - { - IMapDecoration md = Activator.CreateInstance(mdType) as IMapDecoration; - map.Decorations.Add(md); - } - } - - mapBox1.Map = map; - } - - private void lvwDecorations_ItemChecked(object sender, ItemCheckedEventArgs e) - { - Type mdType; - if (!MapDecorationTypes.TryGetValue(e.Item.Text, out mdType)) - return; - - if (e.Item.Checked) - { - IMapDecoration ins = Activator.CreateInstance(mdType) as IMapDecoration; - if (ins != null) - { - mapBox1.Map.Decorations.Add(ins); - } - } - else - { - foreach (var item in mapBox1.Map.Decorations) - { - var mdTmpType = item.GetType(); - if (mdType.Equals(mdTmpType)) - { - mapBox1.Map.Decorations.Remove(item); - break; - } - } - } - e.Item.Selected = true; - mapBox1.Refresh(); - } - - private void lvwDecorations_SelectedIndexChanged(object sender, EventArgs e) - { - if (lvwDecorations.SelectedItems.Count == 0) - { - pgMapDecoration.SelectedObject = null; - return; - } - - var lvwi = (ListViewItem)lvwDecorations.SelectedItems[0]; - if (!lvwi.Checked) - { - pgMapDecoration.SelectedObject = null; - pgMapDecoration.Visible = false; - return; - } - - Type mdType; - if (MapDecorationTypes.TryGetValue(lvwi.Text, out mdType)) - { - foreach (IMapDecoration mapDecoration in mapBox1.Map.Decorations) - { - if (mapDecoration.GetType().Equals(mdType)) - { - pgMapDecoration.SelectedObject = mapDecoration; - pgMapDecoration.Visible = true; - return; - } - } - } - pgMapDecoration.SelectedObject = null; - pgMapDecoration.Visible = false; - - } - - private SplitContainer scMapProp; - private PropertyGrid pgMap; - private FlowLayoutPanel flowLayoutPanel1; - private RadioButton radioButton2; - private RadioButton radioButton3; - private RadioButton radioButton4; - private RadioButton radioButton1; - private RadioButton radioButton5; - private RadioButton radioButton6; - private RadioButton radioButton7; - private RadioButton radioButton8; - private RadioButton radioButton9; - private RadioButton radioButton10; - private ListView lvwDecorations; - private PropertyGrid pgMapDecoration; - private Button btnCreateTiles; - private ToolStripContainer toolStripContainer1; - private MapBox mapBox1; - private SharpMap.Forms.ToolBar.MapQueryToolStrip mapQueryToolStrip1; - private SharpMap.Forms.ToolBar.MapZoomToolStrip mapZoomToolStrip1; - private SharpMap.Forms.ToolBar.MapDigitizeGeometriesToolStrip mapDigitizeGeometriesToolStrip1; - private SharpMap.Forms.ToolBar.MapVariableLayerToolStrip mapVariableLayerToolStrip1; - - private void btnCreateTiles_Click(object sender, EventArgs e) - { - if (mapBox1.Map == null) - return; - - if (mapBox1.Map.Layers.Count == 0) - return; - - using (var f = new FormCreateTilesSample()) - { - f.Map = mapBox1.Map; - f.ShowDialog(); - } - } - - private RadioButton radioButton11; - private TrackBar tbAngle; - private Button btnTool; - private ToolTip toolTip1; - private Button btnTool2; - private RadioButton radioButton12; - } -} - +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using SharpMap.Data; +using SharpMap.Rendering.Decoration; +using SharpMap.Forms; +using WinFormSamples.Samples; + +namespace WinFormSamples +{ + partial class FormMapBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.scMain = new System.Windows.Forms.SplitContainer(); + this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); + this.btnTool2 = new System.Windows.Forms.Button(); + this.btnTool = new System.Windows.Forms.Button(); + this.mapBox1 = new SharpMap.Forms.MapBox(); + this.mapDigitizeGeometriesToolStrip1 = new SharpMap.Forms.ToolBar.MapDigitizeGeometriesToolStrip(this.components); + this.mapVariableLayerToolStrip1 = new SharpMap.Forms.ToolBar.MapVariableLayerToolStrip(this.components); + this.mapQueryToolStrip1 = new SharpMap.Forms.ToolBar.MapQueryToolStrip(this.components); + this.mapZoomToolStrip1 = new SharpMap.Forms.ToolBar.MapZoomToolStrip(this.components); + this.tbAngle = new System.Windows.Forms.TrackBar(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.pgMap = new System.Windows.Forms.PropertyGrid(); + this.flowLayoutRight = new System.Windows.Forms.FlowLayoutPanel(); + this.flowLayoutLeft = new System.Windows.Forms.FlowLayoutPanel(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton5 = new System.Windows.Forms.RadioButton(); + this.radioButton6 = new System.Windows.Forms.RadioButton(); + this.radioButton7 = new System.Windows.Forms.RadioButton(); + this.radioButton8 = new System.Windows.Forms.RadioButton(); + this.radioButton9 = new System.Windows.Forms.RadioButton(); + this.radioButton12 = new System.Windows.Forms.RadioButton(); + this.radioButton10 = new System.Windows.Forms.RadioButton(); + this.radioButton11 = new System.Windows.Forms.RadioButton(); + this.btnCreateTiles = new System.Windows.Forms.Button(); + this.lvwDecorations = new System.Windows.Forms.ListView(); + this.pgMapDecoration = new System.Windows.Forms.PropertyGrid(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); + this.scMain.Panel1.SuspendLayout(); + this.scMain.Panel2.SuspendLayout(); + this.scMain.SuspendLayout(); + this.toolStripContainer1.ContentPanel.SuspendLayout(); + this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbAngle)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.flowLayoutRight.SuspendLayout(); + this.flowLayoutLeft.SuspendLayout(); + this.SuspendLayout(); + // + // scMain + // + this.scMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.scMain.Location = new System.Drawing.Point(171, 0); + this.scMain.Name = "scMain"; + this.scMain.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // scMain.Panel1 + // + this.scMain.Panel1.Controls.Add(this.toolStripContainer1); + this.scMain.Panel1.Controls.Add(this.tbAngle); + this.scMain.Panel1.SizeChanged += new System.EventHandler(this.mapImage_SizeChanged); + // + // scMain.Panel2 + // + this.scMain.Panel2.Controls.Add(this.dataGridView1); + this.scMain.Size = new System.Drawing.Size(720, 648); + this.scMain.SplitterDistance = 525; + this.scMain.TabIndex = 4; + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool2); + this.toolStripContainer1.ContentPanel.Controls.Add(this.btnTool); + this.toolStripContainer1.ContentPanel.Controls.Add(this.mapBox1); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(720, 430); + this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); + this.toolStripContainer1.Name = "toolStripContainer1"; + this.toolStripContainer1.Size = new System.Drawing.Size(720, 480); + this.toolStripContainer1.TabIndex = 7; + this.toolStripContainer1.Text = "toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this.toolStripContainer1.TopToolStripPanel.BackColor = System.Drawing.SystemColors.ControlLight; + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapDigitizeGeometriesToolStrip1); + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapVariableLayerToolStrip1); + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapQueryToolStrip1); + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.mapZoomToolStrip1); + // + // btnTool2 + // + this.btnTool2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnTool2.Location = new System.Drawing.Point(664, 32); + this.btnTool2.Name = "btnTool2"; + this.btnTool2.Size = new System.Drawing.Size(53, 23); + this.btnTool2.TabIndex = 9; + this.btnTool2.Text = "Magnify"; + this.btnTool2.UseVisualStyleBackColor = true; + this.btnTool2.Click += new System.EventHandler(this.btnTool_Click); + // + // btnTool + // + this.btnTool.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnTool.Location = new System.Drawing.Point(664, 3); + this.btnTool.Name = "btnTool"; + this.btnTool.Size = new System.Drawing.Size(53, 23); + this.btnTool.TabIndex = 8; + this.btnTool.Text = "Hover"; + this.btnTool.UseVisualStyleBackColor = true; + this.btnTool.Click += new System.EventHandler(this.btnTool_Click); + // + // mapBox1 + // + this.mapBox1.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan; + this.mapBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.mapBox1.CustomTool = null; + this.mapBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.mapBox1.FineZoomFactor = 10D; + this.mapBox1.Location = new System.Drawing.Point(0, 0); + this.mapBox1.MapQueryMode = SharpMap.Forms.MapBox.MapQueryType.LayerByIndex; + this.mapBox1.Margin = new System.Windows.Forms.Padding(0); + this.mapBox1.Name = "mapBox1"; + this.mapBox1.QueryGrowFactor = 5F; + this.mapBox1.QueryLayerIndex = 0; + this.mapBox1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.mapBox1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.mapBox1.ShowProgressUpdate = true; + this.mapBox1.Size = new System.Drawing.Size(720, 430); + this.mapBox1.TabIndex = 7; + this.mapBox1.Text = "mapBox1"; + this.mapBox1.WheelZoomMagnitude = 2D; + this.mapBox1.MapRefreshed += new System.EventHandler(this.mapImage_MapRefreshed); + this.mapBox1.MapZoomChanged += new SharpMap.Forms.MapBox.MapZoomHandler(this.mapImage_MapZoomChanged); + this.mapBox1.MapZooming += new SharpMap.Forms.MapBox.MapZoomHandler(this.mapImage_MapZooming); + this.mapBox1.MapQueried += new SharpMap.Forms.MapBox.MapQueryHandler(this.mapBox1_OnMapQueried); + this.mapBox1.MapQueryStarted += new System.EventHandler(this.mapBox1_MapQueryStarted); + this.mapBox1.MapQueryDone += new System.EventHandler(this.mapBox1_MapQueryEnded); + this.mapBox1.MapCenterChanged += new SharpMap.Forms.MapBox.MapCenterChangedHandler(this.mapImage_MapCenterChanged); + this.mapBox1.ActiveToolChanged += new SharpMap.Forms.MapBox.ActiveToolChangedHandler(this.mapImage_ActiveToolChanged); + this.mapBox1.SizeChanged += new System.EventHandler(this.mapImage_SizeChanged); + // + // mapDigitizeGeometriesToolStrip1 + // + this.mapDigitizeGeometriesToolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.mapDigitizeGeometriesToolStrip1.Enabled = false; + this.mapDigitizeGeometriesToolStrip1.Location = new System.Drawing.Point(358, 0); + this.mapDigitizeGeometriesToolStrip1.MapControl = this.mapBox1; + this.mapDigitizeGeometriesToolStrip1.Name = "mapDigitizeGeometriesToolStrip1"; + this.mapDigitizeGeometriesToolStrip1.Size = new System.Drawing.Size(110, 25); + this.mapDigitizeGeometriesToolStrip1.TabIndex = 9; + // + // mapVariableLayerToolStrip1 + // + this.mapVariableLayerToolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.mapVariableLayerToolStrip1.Enabled = false; + this.mapVariableLayerToolStrip1.Location = new System.Drawing.Point(3, 0); + this.mapVariableLayerToolStrip1.MapControl = this.mapBox1; + this.mapVariableLayerToolStrip1.Name = "mapVariableLayerToolStrip1"; + this.mapVariableLayerToolStrip1.Size = new System.Drawing.Size(137, 25); + this.mapVariableLayerToolStrip1.TabIndex = 10; + // + // mapQueryToolStrip1 + // + this.mapQueryToolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.mapQueryToolStrip1.Enabled = false; + this.mapQueryToolStrip1.Location = new System.Drawing.Point(140, 0); + this.mapQueryToolStrip1.MapControl = this.mapBox1; + this.mapQueryToolStrip1.Name = "mapQueryToolStrip1"; + this.mapQueryToolStrip1.Size = new System.Drawing.Size(216, 25); + this.mapQueryToolStrip1.TabIndex = 8; + this.mapQueryToolStrip1.Text = "mapQueryToolStrip1"; + // + // mapZoomToolStrip1 + // + this.mapZoomToolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.mapZoomToolStrip1.Enabled = false; + this.mapZoomToolStrip1.Location = new System.Drawing.Point(3, 25); + this.mapZoomToolStrip1.MapControl = this.mapBox1; + this.mapZoomToolStrip1.Name = "mapZoomToolStrip1"; + this.mapZoomToolStrip1.Size = new System.Drawing.Size(408, 25); + this.mapZoomToolStrip1.TabIndex = 8; + this.mapZoomToolStrip1.Text = "mapZoomToolStrip1"; + // + // tbAngle + // + this.tbAngle.BackColor = System.Drawing.SystemColors.ControlLight; + this.tbAngle.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tbAngle.LargeChange = 45; + this.tbAngle.Location = new System.Drawing.Point(0, 480); + this.tbAngle.Maximum = 180; + this.tbAngle.Minimum = -180; + this.tbAngle.Name = "tbAngle"; + this.tbAngle.Size = new System.Drawing.Size(720, 45); + this.tbAngle.SmallChange = 15; + this.tbAngle.TabIndex = 5; + this.tbAngle.TickFrequency = 15; + this.tbAngle.Scroll += new System.EventHandler(this.tbAngle_Scroll); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView1.Location = new System.Drawing.Point(0, 0); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(720, 119); + this.dataGridView1.TabIndex = 4; + // + // pgMap + // + this.pgMap.Location = new System.Drawing.Point(3, 3); + this.pgMap.Name = "pgMap"; + this.pgMap.SelectedObject = this.mapBox1; + this.pgMap.Size = new System.Drawing.Size(172, 644); + this.pgMap.TabIndex = 3; + // + // flowLayoutRight + // + this.flowLayoutRight.BackColor = System.Drawing.SystemColors.ControlLight; + this.flowLayoutRight.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.flowLayoutRight.Controls.Add(this.pgMap); + this.flowLayoutRight.Dock = System.Windows.Forms.DockStyle.Right; + this.flowLayoutRight.Location = new System.Drawing.Point(891, 0); + this.flowLayoutRight.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutRight.Name = "flowLayoutRight"; + this.flowLayoutRight.Size = new System.Drawing.Size(175, 648); + this.flowLayoutRight.TabIndex = 5; + // + // flowLayoutLeft + // + this.flowLayoutLeft.BackColor = System.Drawing.SystemColors.ControlLight; + this.flowLayoutLeft.Controls.Add(this.radioButton2); + this.flowLayoutLeft.Controls.Add(this.radioButton3); + this.flowLayoutLeft.Controls.Add(this.radioButton4); + this.flowLayoutLeft.Controls.Add(this.radioButton1); + this.flowLayoutLeft.Controls.Add(this.radioButton5); + this.flowLayoutLeft.Controls.Add(this.radioButton6); + this.flowLayoutLeft.Controls.Add(this.radioButton7); + this.flowLayoutLeft.Controls.Add(this.radioButton8); + this.flowLayoutLeft.Controls.Add(this.radioButton9); + this.flowLayoutLeft.Controls.Add(this.radioButton12); + this.flowLayoutLeft.Controls.Add(this.radioButton10); + this.flowLayoutLeft.Controls.Add(this.radioButton11); + this.flowLayoutLeft.Controls.Add(this.btnCreateTiles); + this.flowLayoutLeft.Controls.Add(this.lvwDecorations); + this.flowLayoutLeft.Controls.Add(this.pgMapDecoration); + this.flowLayoutLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.flowLayoutLeft.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flowLayoutLeft.Location = new System.Drawing.Point(0, 0); + this.flowLayoutLeft.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutLeft.Name = "flowLayoutLeft"; + this.flowLayoutLeft.Padding = new System.Windows.Forms.Padding(10, 4, 4, 4); + this.flowLayoutLeft.Size = new System.Drawing.Size(171, 648); + this.flowLayoutLeft.TabIndex = 5; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(13, 7); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(69, 17); + this.radioButton2.TabIndex = 0; + this.radioButton2.Text = "Shapefile"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.Click += new System.EventHandler(this.radioButton_Click); + this.radioButton2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(13, 30); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(98, 17); + this.radioButton3.TabIndex = 1; + this.radioButton3.Text = "GradientTheme"; + this.radioButton3.UseVisualStyleBackColor = true; + this.radioButton3.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Location = new System.Drawing.Point(13, 53); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(81, 17); + this.radioButton4.TabIndex = 3; + this.radioButton4.Text = "WMS Client"; + this.radioButton4.UseVisualStyleBackColor = true; + this.radioButton4.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Location = new System.Drawing.Point(13, 76); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(78, 17); + this.radioButton1.TabIndex = 2; + this.radioButton1.Text = "WFS Client"; + this.radioButton1.UseVisualStyleBackColor = true; + this.radioButton1.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton5 + // + this.radioButton5.AutoSize = true; + this.radioButton5.Location = new System.Drawing.Point(13, 99); + this.radioButton5.Name = "radioButton5"; + this.radioButton5.Size = new System.Drawing.Size(97, 17); + this.radioButton5.TabIndex = 4; + this.radioButton5.Text = "OGR - MapInfo"; + this.radioButton5.UseVisualStyleBackColor = true; + this.radioButton5.Click += new System.EventHandler(this.radioButton_Click); + this.radioButton5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); + // + // radioButton6 + // + this.radioButton6.AutoSize = true; + this.radioButton6.Location = new System.Drawing.Point(13, 122); + this.radioButton6.Name = "radioButton6"; + this.radioButton6.Size = new System.Drawing.Size(98, 17); + this.radioButton6.TabIndex = 4; + this.radioButton6.Text = "GDAL - GeoTiff"; + this.radioButton6.UseVisualStyleBackColor = true; + this.radioButton6.Click += new System.EventHandler(this.radioButton_Click); + this.radioButton6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); + // + // radioButton7 + // + this.radioButton7.AutoSize = true; + this.radioButton7.Location = new System.Drawing.Point(13, 145); + this.radioButton7.Name = "radioButton7"; + this.radioButton7.Size = new System.Drawing.Size(101, 17); + this.radioButton7.TabIndex = 5; + this.radioButton7.Text = "TileLayer - OSM"; + this.radioButton7.UseVisualStyleBackColor = true; + this.radioButton7.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton8 + // + this.radioButton8.AutoSize = true; + this.radioButton8.Location = new System.Drawing.Point(13, 168); + this.radioButton8.Name = "radioButton8"; + this.radioButton8.Size = new System.Drawing.Size(61, 17); + this.radioButton8.TabIndex = 6; + this.radioButton8.Text = "PostGis"; + this.radioButton8.UseVisualStyleBackColor = true; + this.radioButton8.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton9 + // + this.radioButton9.AutoSize = true; + this.radioButton9.Location = new System.Drawing.Point(13, 191); + this.radioButton9.Name = "radioButton9"; + this.radioButton9.Size = new System.Drawing.Size(72, 17); + this.radioButton9.TabIndex = 7; + this.radioButton9.Text = "SpatiaLite"; + this.radioButton9.UseVisualStyleBackColor = true; + this.radioButton9.Click += new System.EventHandler(this.radioButton_Click); + this.radioButton9.MouseUp += new System.Windows.Forms.MouseEventHandler(this.radioButton2_MouseUp); + // + // radioButton12 + // + this.radioButton12.AutoSize = true; + this.radioButton12.Location = new System.Drawing.Point(13, 214); + this.radioButton12.Name = "radioButton12"; + this.radioButton12.Size = new System.Drawing.Size(71, 17); + this.radioButton12.TabIndex = 13; + this.radioButton12.Text = "SqlServer"; + this.radioButton12.UseVisualStyleBackColor = true; + this.radioButton12.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton10 + // + this.radioButton10.AutoSize = true; + this.radioButton10.Location = new System.Drawing.Point(13, 237); + this.radioButton10.Name = "radioButton10"; + this.radioButton10.Size = new System.Drawing.Size(105, 17); + this.radioButton10.TabIndex = 9; + this.radioButton10.Text = "shp_TextOnPath"; + this.radioButton10.UseVisualStyleBackColor = true; + this.radioButton10.Click += new System.EventHandler(this.radioButton_Click); + // + // radioButton11 + // + this.radioButton11.AutoSize = true; + this.radioButton11.Location = new System.Drawing.Point(13, 260); + this.radioButton11.Name = "radioButton11"; + this.radioButton11.Size = new System.Drawing.Size(96, 17); + this.radioButton11.TabIndex = 12; + this.radioButton11.Text = "GdiImageLayer"; + this.radioButton11.UseVisualStyleBackColor = true; + this.radioButton11.Click += new System.EventHandler(this.radioButton_Click); + // + // btnCreateTiles + // + this.btnCreateTiles.Location = new System.Drawing.Point(13, 283); + this.btnCreateTiles.Name = "btnCreateTiles"; + this.btnCreateTiles.Size = new System.Drawing.Size(147, 23); + this.btnCreateTiles.TabIndex = 11; + this.btnCreateTiles.Text = "Create tiles"; + this.btnCreateTiles.UseVisualStyleBackColor = true; + this.btnCreateTiles.Click += new System.EventHandler(this.btnCreateTiles_Click); + // + // lvwDecorations + // + this.lvwDecorations.CheckBoxes = true; + this.lvwDecorations.Location = new System.Drawing.Point(13, 312); + this.lvwDecorations.MultiSelect = false; + this.lvwDecorations.Name = "lvwDecorations"; + this.lvwDecorations.Size = new System.Drawing.Size(147, 58); + this.lvwDecorations.TabIndex = 4; + this.lvwDecorations.UseCompatibleStateImageBehavior = false; + this.lvwDecorations.View = System.Windows.Forms.View.List; + this.lvwDecorations.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lvwDecorations_ItemChecked); + this.lvwDecorations.SelectedIndexChanged += new System.EventHandler(this.lvwDecorations_SelectedIndexChanged); + // + // pgMapDecoration + // + this.pgMapDecoration.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pgMapDecoration.Location = new System.Drawing.Point(15, 376); + this.pgMapDecoration.Name = "pgMapDecoration"; + this.pgMapDecoration.SelectedObject = this.lvwDecorations; + this.pgMapDecoration.Size = new System.Drawing.Size(143, 262); + this.pgMapDecoration.TabIndex = 9; + // + // FormMapBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1066, 648); + this.Controls.Add(this.scMain); + this.Controls.Add(this.flowLayoutLeft); + this.Controls.Add(this.flowLayoutRight); + this.Name = "FormMapBox"; + this.Text = "SharpMap Samples - MapBox"; + this.scMain.Panel1.ResumeLayout(false); + this.scMain.Panel1.PerformLayout(); + this.scMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit(); + this.scMain.ResumeLayout(false); + this.toolStripContainer1.ContentPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.PerformLayout(); + this.toolStripContainer1.ResumeLayout(false); + this.toolStripContainer1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbAngle)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.flowLayoutRight.ResumeLayout(false); + this.flowLayoutLeft.ResumeLayout(false); + this.flowLayoutLeft.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer scMain; + private System.Windows.Forms.DataGridView dataGridView1; + private WinFormSamples.Samples.FormSqlServerOpts formSqlServerOpts; + private System.Windows.Forms.FlowLayoutPanel flowLayoutRight; + private System.Windows.Forms.PropertyGrid pgMap; + private System.Windows.Forms.FlowLayoutPanel flowLayoutLeft; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton5; + private System.Windows.Forms.RadioButton radioButton6; + private System.Windows.Forms.RadioButton radioButton7; + private System.Windows.Forms.RadioButton radioButton8; + private System.Windows.Forms.RadioButton radioButton9; + private System.Windows.Forms.RadioButton radioButton10; + private System.Windows.Forms.ListView lvwDecorations; + private System.Windows.Forms.PropertyGrid pgMapDecoration; + private System.Windows.Forms.Button btnCreateTiles; + private System.Windows.Forms.ToolStripContainer toolStripContainer1; + private SharpMap.Forms.MapBox mapBox1; + private SharpMap.Forms.ToolBar.MapQueryToolStrip mapQueryToolStrip1; + private SharpMap.Forms.ToolBar.MapZoomToolStrip mapZoomToolStrip1; + private SharpMap.Forms.ToolBar.MapDigitizeGeometriesToolStrip mapDigitizeGeometriesToolStrip1; + private SharpMap.Forms.ToolBar.MapVariableLayerToolStrip mapVariableLayerToolStrip1; + private System.Windows.Forms.RadioButton radioButton11; + private System.Windows.Forms.TrackBar tbAngle; + private System.Windows.Forms.Button btnTool; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Button btnTool2; + private System.Windows.Forms.RadioButton radioButton12; + } +} + diff --git a/Examples/WinFormSamples/FormMapBox.cs b/Examples/WinFormSamples/FormMapBox.cs index fa12de3e..a73f0d05 100644 --- a/Examples/WinFormSamples/FormMapBox.cs +++ b/Examples/WinFormSamples/FormMapBox.cs @@ -1,161 +1,480 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.Windows.Forms; -using ProjNet.CoordinateSystems; -using ProjNet.CoordinateSystems.Transformations; -using SharpMap; -using SharpMap.CoordinateSystems; -using SharpMap.CoordinateSystems.Transformations; -using SharpMap.Forms; -using SharpMap.Forms.Tools; -using SharpMap.Layers; - -namespace WinFormSamples -{ - public partial class FormMapBox : Form - { - private static readonly Dictionary MapDecorationTypes = new Dictionary(); - private static bool AddToListView; - - public static bool UseDotSpatial - { - get - { - return Session.Instance.CoordinateSystemServices.GetCoordinateSystem(4326) is DotSpatialCoordinateSystem; - } - set - { - if (value == UseDotSpatial) return; - - var s = (Session) Session.Instance; - var css = !value - ? new CoordinateSystemServices( - new CoordinateSystemFactory(), - new CoordinateTransformationFactory(), - SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()) - : new CoordinateSystemServices( - new DotSpatialCoordinateSystemFactory(), - new DotSpatialCoordinateTransformationFactory(), - SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); - s.SetCoordinateSystemServices(css); - } - } - - public FormMapBox() - { - AddToListView = false; - - InitializeComponent(); - mapBox1.ActiveTool = MapBox.Tools.Pan; - - var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); - foreach (System.Reflection.Assembly a in loadedAssemblies) - LoadMapDecorationTypes(a); - - AddToListView = true; - AppDomain.CurrentDomain.AssemblyLoad += HandleAssemblyLoad; - - foreach (var name in MapDecorationTypes.Keys) - { - lvwDecorations.Items.Add(name); - } - pgMapDecoration.SelectedObject = null; - - } - - private void HandleAssemblyLoad(object sender, AssemblyLoadEventArgs args) - { - LoadMapDecorationTypes(args.LoadedAssembly); - } - - private void LoadMapDecorationTypes(System.Reflection.Assembly a) - { - var mdtype = typeof(SharpMap.Rendering.Decoration.IMapDecoration); - foreach (Type type in a.GetTypes()) - { - if (type.FullName.StartsWith("SharpMap")) - Console.WriteLine(type.FullName); - if (mdtype.IsAssignableFrom(type)) - { - if (!type.IsAbstract) - { - if (AddToListView) - lvwDecorations.Items.Add(new ListViewItem(type.Name)); - MapDecorationTypes.Add(type.Name, type); - } - } - } - } - - private void UpdatePropertyGrid() - { - if (pgMap.InvokeRequired) - pgMap.Invoke(new MethodInvoker(() => pgMap.Update())); - else - pgMap.Update(); - } - - private static void AdjustRotation(LayerCollection lc, float angle) - { - foreach (ILayer layer in lc) - { - if (layer is VectorLayer) - ((VectorLayer) layer).Style.SymbolRotation = -angle; - else if (layer is LabelLayer) - ((LabelLayer)layer).Style.Rotation = -angle; - } - } - - private static string[] GetOpenFileName(string filter) - { - using (var ofd = new OpenFileDialog()) - { - ofd.CheckFileExists = true; - ofd.ShowReadOnly = false; - ofd.Multiselect = true; - - ofd.Filter = filter; - if (ofd.ShowDialog() == DialogResult.OK) - return ofd.FileNames; - return null; - } - } - - private void btnTool_Click(object sender, EventArgs e) - { - var btn = (Button) sender; - IMapTool tool = null; - - switch (btn.Name) - { - case "btnTool": - tool = (mapBox1.CustomTool is SampleTool) ? null : new SampleTool(mapBox1); - break; - case "btnTool2": - tool = (mapBox1.CustomTool is MagnifierTool) ? null : new MagnifierTool(mapBox1); - break; - } - - var oldCustomTool = mapBox1.CustomTool; - if (oldCustomTool is SampleTool) btnTool.Font = new Font(btn.Font, FontStyle.Regular); - if (oldCustomTool is MagnifierTool) btnTool2.Font = new Font(btn.Font, FontStyle.Regular); - - if (oldCustomTool is IDisposable) ((IDisposable) oldCustomTool).Dispose(); - - mapBox1.CustomTool = tool; - btn.Font = new Font(btn.Font, tool == null ? FontStyle.Regular : FontStyle.Bold); - if (tool == null) - mapBox1.ActiveTool = MapBox.Tools.Pan; - - //if (mapBox1.CustomTool == null) - // mapBox1.CustomTool = new SampleTool(mapBox1); - //else - //{ - // mapBox1.CustomTool = null; - // mapBox1.ActiveTool = MapBox.Tools.Pan; - //} - } - } -} +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Windows.Forms; +using ProjNet.CoordinateSystems; +using ProjNet.CoordinateSystems.Transformations; +using SharpMap; +using SharpMap.CoordinateSystems; +using SharpMap.CoordinateSystems.Transformations; +using SharpMap.Forms; +using SharpMap.Forms.Tools; +using SharpMap.Layers; +using System.Drawing.Drawing2D; +using SharpMap.Data; +using SharpMap.Rendering.Decoration; +using WinFormSamples.Samples; + +namespace WinFormSamples +{ + public partial class FormMapBox : Form + { + private static readonly Dictionary MapDecorationTypes = new Dictionary(); + private static bool AddToListView; + + public static bool UseDotSpatial + { + get + { + return Session.Instance.CoordinateSystemServices.GetCoordinateSystem(4326) is DotSpatialCoordinateSystem; + } + set + { + if (value == UseDotSpatial) return; + + var s = (Session) Session.Instance; + var css = !value + ? new CoordinateSystemServices( + new CoordinateSystemFactory(), + new CoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()) + : new CoordinateSystemServices( + new DotSpatialCoordinateSystemFactory(), + new DotSpatialCoordinateTransformationFactory(), + SharpMap.Converters.WellKnownText.SpatialReference.GetAllReferenceSystems()); + s.SetCoordinateSystemServices(css); + } + } + + public FormMapBox() + { + AddToListView = false; + + InitializeComponent(); + mapBox1.ActiveTool = MapBox.Tools.Pan; + + var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (System.Reflection.Assembly a in loadedAssemblies) + LoadMapDecorationTypes(a); + + foreach (var name in MapDecorationTypes.Keys) + { + lvwDecorations.Items.Add(name); + } + + AddToListView = true; + + AppDomain.CurrentDomain.AssemblyLoad += HandleAssemblyLoad; + + pgMapDecoration.SelectedObject = null; + } + + private void HandleAssemblyLoad(object sender, AssemblyLoadEventArgs args) + { + LoadMapDecorationTypes(args.LoadedAssembly); + } + + private void LoadMapDecorationTypes(System.Reflection.Assembly a) + { + var mdtype = typeof(SharpMap.Rendering.Decoration.IMapDecoration); + foreach (Type type in a.GetTypes()) + { + if (type.FullName.StartsWith("SharpMap")) + Console.WriteLine(type.FullName); + if (mdtype.IsAssignableFrom(type)) + { + if (!type.IsAbstract) + { + if (AddToListView) + lvwDecorations.Items.Add(new ListViewItem(type.Name)); + MapDecorationTypes[type.Name] = type; + } + } + } + } + + private void UpdatePropertyGrid() + { + if (pgMap.InvokeRequired) + pgMap.Invoke(new MethodInvoker(() => pgMap.Update())); + else + pgMap.Update(); + } + + private static void AdjustRotation(LayerCollection lc, float angle) + { + foreach (ILayer layer in lc) + { + if (layer is VectorLayer) + ((VectorLayer) layer).Style.SymbolRotation = -angle; + else if (layer is LabelLayer) + ((LabelLayer)layer).Style.Rotation = -angle; + } + } + + private static string[] GetOpenFileName(string filter) + { + using (var ofd = new OpenFileDialog()) + { + ofd.CheckFileExists = true; + ofd.ShowReadOnly = false; + ofd.Multiselect = true; + + ofd.Filter = filter; + if (ofd.ShowDialog() == DialogResult.OK) + return ofd.FileNames; + return null; + } + } + + private void btnTool_Click(object sender, EventArgs e) + { + var btn = (Button) sender; + IMapTool tool = null; + + switch (btn.Name) + { + case "btnTool": + tool = (mapBox1.CustomTool is SampleTool) ? null : new SampleTool(mapBox1); + break; + case "btnTool2": + tool = (mapBox1.CustomTool is MagnifierTool) ? null : new MagnifierTool(mapBox1); + break; + } + + var oldCustomTool = mapBox1.CustomTool; + if (oldCustomTool is SampleTool) btnTool.Font = new Font(btn.Font, FontStyle.Regular); + if (oldCustomTool is MagnifierTool) btnTool2.Font = new Font(btn.Font, FontStyle.Regular); + + if (oldCustomTool is IDisposable) ((IDisposable) oldCustomTool).Dispose(); + + mapBox1.CustomTool = tool; + btn.Font = new Font(btn.Font, tool == null ? FontStyle.Regular : FontStyle.Bold); + if (tool == null) + mapBox1.ActiveTool = MapBox.Tools.Pan; + + //if (mapBox1.CustomTool == null) + // mapBox1.CustomTool = new SampleTool(mapBox1); + //else + //{ + // mapBox1.CustomTool = null; + // mapBox1.ActiveTool = MapBox.Tools.Pan; + //} + } + + void mapBox1_MapQueryStarted(object sender, EventArgs e) + { + dataGridView1.DataSource = _queriedData = null; + } + + void mapBox1_MapQueryEnded(object sender, EventArgs e) + { + if (_queriedData != null && _queriedData.Tables.Count > 0) + dataGridView1.DataSource = _queriedData.Tables[0]; + } + + private FeatureDataSet _queriedData; + private void mapBox1_OnMapQueried(FeatureDataTable data) + { + if (_queriedData == null) + _queriedData = new FeatureDataSet(); + _queriedData.Tables.Add(data); + } + + private void btnCreateTiles_Click(object sender, EventArgs e) + { + if (mapBox1.Map == null) + return; + + if (mapBox1.Map.Layers.Count == 0) + return; + + using (var f = new FormCreateTilesSample()) + { + f.Map = mapBox1.Map; + f.ShowDialog(); + } + } + + private void radioButton_Click(object sender, EventArgs e) + { + Cursor mic = mapBox1.Cursor; + mapBox1.Cursor = Cursors.WaitCursor; + Cursor = Cursors.WaitCursor; + + if (formSqlServerOpts != null) + { + formSqlServerOpts.Close(); + formSqlServerOpts = null; + } + + try + { + //mapImage.ActiveTool = MapImage.Tools.None; + string text = ((RadioButton)sender).Text; + + switch (text) + { + case "Shapefile": + mapBox1.Map = ShapefileSample.InitializeMap(tbAngle.Value); + break; + case "GradientTheme": + mapBox1.Map = GradiantThemeSample.InitializeMap(tbAngle.Value); + break; + case "WFS Client": + mapBox1.Map = WfsSample.InitializeMap(tbAngle.Value); + break; + case "WMS Client": + //mapBox1.Map = TiledWmsSample.InitializeMap(); + mapBox1.Map = WmsSample.InitializeMap(tbAngle.Value); + break; + case "OGR - MapInfo": + case "OGR - S-57": + mapBox1.Map = OgrSample.InitializeMap(tbAngle.Value); + break; + case "GDAL - GeoTiff": + case "GDAL - '.DEM'": + case "GDAL - '.ASC'": + case "GDAL - '.VRT'": + mapBox1.Map = GdalSample.InitializeMap(tbAngle.Value); + mapBox1.ActiveTool = MapBox.Tools.Pan; + break; + case "TileLayer - OSM": + case "TileLayer - OSM with XLS": + case "TileLayer - Bing Roads": + case "TileLayer - Bing Aerial": + case "TileLayer - Bing Hybrid": + case "TileLayer - GoogleMap": + case "TileLayer - GoogleSatellite": + case "TileLayer - GoogleTerrain": + case "TileLayer - GoogleLabels": + case "Eniro": + /* + tbAngle.Visible = text.Equals("TileLayer - GoogleLabels"); + if (!tbAngle.Visible) tbAngle.Value = 0; + */ + mapBox1.Map = TileLayerSample.InitializeMap(tbAngle.Value); + ((RadioButton)sender).Text = (mapBox1.Map.BackgroundLayer.Count > 0) + ? ((RadioButton)sender).Text = mapBox1.Map.BackgroundLayer[0].LayerName + : ((RadioButton)sender).Text = mapBox1.Map.Layers[0].LayerName; + break; + case "PostGis": + mapBox1.Map = PostGisSample.InitializeMap(tbAngle.Value); + break; + case "SpatiaLite": + mapBox1.Map = SpatiaLiteSample.InitializeMap(tbAngle.Value); + break; + case "SqlServer": + // create empty map with BruTile basemap + mapBox1.Map = SqlServerSample.InitializeMap(tbAngle.Value); + // check conn string + var connStrBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder(Properties.Settings.Default.SqlServerConnectionString); + if (string.IsNullOrEmpty(connStrBuilder.DataSource) || string.IsNullOrEmpty(connStrBuilder.InitialCatalog)) + { + mapBox1.Refresh(); + + MessageBox.Show("Requires SqlServer connection string to be defined (Project / Settings)\n\n" + + "Also, if project folder SqlServerTypes\\x64 and \\x86 are empty, then force reinstall of NuGet package:\n\n" + + "PM> Update-Package Microsoft.SqlServer.Types -ProjectName Examples\\WinFormSamples -reinstall -ignoreDependencies","Sql Server", + MessageBoxButtons.OK,MessageBoxIcon.Information); + + return; + } + // now show SqlServer dialog + formSqlServerOpts = new FormSqlServerOpts() + { + MapBox = mapBox1, + ConnectionString = connStrBuilder.ToString() + }; + formSqlServerOpts.Show(this); + break; + case "Oracle": + mapBox1.Map = OracleSample.InitializeMap(tbAngle.Value); + break; + case "shp_TextOnPath": + mapBox1.Map = TextOnPathSample.InitializeMapOrig(tbAngle.Value); + break; + case "GdiImageLayer": + mapBox1.Map = GdiImageLayerSample.InitializeMap(tbAngle.Value); + break; + default: + break; + } + + //Add checked Map decorations + foreach (ListViewItem checkedItem in lvwDecorations.CheckedItems) + { + Type mdType; + if (MapDecorationTypes.TryGetValue(checkedItem.Text, out mdType)) + { + IMapDecoration md = Activator.CreateInstance(mdType) as IMapDecoration; + mapBox1.Map.Decorations.Add(md); + } + } + + mapBox1.Map.Size = Size; + mapBox1.Refresh(); + } + catch (Exception ex) + { + MessageBox.Show(this, ex.Message, "Error"); + } + Cursor = Cursors.Default; + mapBox1.Cursor = mic; + } + + private void mapImage_ActiveToolChanged(MapBox.Tools tool) + { + UpdatePropertyGrid(); + } + + private void mapImage_MapCenterChanged(GeoAPI.Geometries.Coordinate center) + { + UpdatePropertyGrid(); + } + + private void mapImage_MapRefreshed(object sender, EventArgs e) + { + UpdatePropertyGrid(); + } + + private void mapImage_MapZoomChanged(double zoom) + { + UpdatePropertyGrid(); + Console.WriteLine("Current Extents: {0}", mapBox1.Map.Envelope); + } + + private void mapImage_MapZooming(double zoom) + { + UpdatePropertyGrid(); + } + + private void mapImage_SizeChanged(object sender, EventArgs e) + { + mapBox1.Refresh(); + } + + private void tbAngle_Scroll(object sender, EventArgs e) + { + System.Drawing.Drawing2D.Matrix matrix = new Matrix(); + if (tbAngle.Value != 0f) + matrix.RotateAt(tbAngle.Value, new PointF(mapBox1.Width * 0.5f, mapBox1.Height * 0.5f)); + + mapBox1.Map.MapTransform = matrix; + AdjustRotation(mapBox1.Map.Layers, tbAngle.Value); + AdjustRotation(mapBox1.Map.VariableLayers, tbAngle.Value); + + mapBox1.Refresh(); + } + + private void radioButton2_MouseUp(object sender, MouseEventArgs e) + { + var rb = sender as RadioButton; + if (rb == null) return; + + if (e.Button != MouseButtons.Right) return; + + SharpMap.Map map = null; + switch (rb.Name) + { + case "radioButton2": // ShapeFile + map = Samples.ShapefileSample.InitializeMap(tbAngle.Value, GetOpenFileName("Shapefile|*.shp")); + break; + case "radioButton5": // Ogr + map = Samples.OgrSample.InitializeMap(tbAngle.Value, GetOpenFileName("Ogr Datasource|*.*")); + break; + case "radioButton6": // Gdal + map = Samples.GdalSample.InitializeMap(tbAngle.Value, GetOpenFileName("Gdal Datasource|*.*")); + break; + case "radioButton9": // spatialite + map = Samples.SpatiaLiteSample.InitializeMap(tbAngle.Value, GetOpenFileName("SpatiaLite 2|*.db;*.sqlite")); + break; + } + + if (map == null) + return; + + + //Add checked Map decorations + foreach (ListViewItem checkedItem in lvwDecorations.CheckedItems) + { + Type mdType; + if (MapDecorationTypes.TryGetValue(checkedItem.Text, out mdType)) + { + IMapDecoration md = Activator.CreateInstance(mdType) as IMapDecoration; + map.Decorations.Add(md); + } + } + + mapBox1.Map = map; + } + + private void lvwDecorations_ItemChecked(object sender, ItemCheckedEventArgs e) + { + Type mdType; + if (!MapDecorationTypes.TryGetValue(e.Item.Text, out mdType)) + return; + + if (e.Item.Checked) + { + IMapDecoration ins = Activator.CreateInstance(mdType) as IMapDecoration; + if (ins != null) + { + mapBox1.Map.Decorations.Add(ins); + } + } + else + { + foreach (var item in mapBox1.Map.Decorations) + { + var mdTmpType = item.GetType(); + if (mdType.Equals(mdTmpType)) + { + mapBox1.Map.Decorations.Remove(item); + break; + } + } + } + e.Item.Selected = true; + mapBox1.Refresh(); + } + + private void lvwDecorations_SelectedIndexChanged(object sender, EventArgs e) + { + if (lvwDecorations.SelectedItems.Count == 0) + { + pgMapDecoration.SelectedObject = null; + return; + } + + var lvwi = (ListViewItem)lvwDecorations.SelectedItems[0]; + if (!lvwi.Checked) + { + pgMapDecoration.SelectedObject = null; + pgMapDecoration.Visible = false; + return; + } + + Type mdType; + if (MapDecorationTypes.TryGetValue(lvwi.Text, out mdType)) + { + foreach (IMapDecoration mapDecoration in mapBox1.Map.Decorations) + { + if (mapDecoration.GetType().Equals(mdType)) + { + pgMapDecoration.SelectedObject = mapDecoration; + pgMapDecoration.Visible = true; + return; + } + } + } + pgMapDecoration.SelectedObject = null; + pgMapDecoration.Visible = false; + + } + + + + } +} diff --git a/Examples/WinFormSamples/FormMapBox.resx b/Examples/WinFormSamples/FormMapBox.resx index 545264c7..3be35963 100644 --- a/Examples/WinFormSamples/FormMapBox.resx +++ b/Examples/WinFormSamples/FormMapBox.resx @@ -1,135 +1,138 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 346, 17 - - - 581, 17 - - - 181, 17 - - - 17, 17 - - - 786, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 346, 17 + + + 581, 17 + + + 181, 17 + + + 17, 17 + + + 786, 17 + + + 92 + \ No newline at end of file From 9cfe123d6daa4f60bf17ea815a182598a59608c2 Mon Sep 17 00:00:00 2001 From: Tim C Date: Wed, 17 Jul 2019 14:15:40 +0700 Subject: [PATCH 099/186] Update samples for Graticule Map Decoration --- Examples/WinFormSamples/Form2.Designer.cs | 2 +- Examples/WinFormSamples/Form2.cs | 271 +----- .../WinFormSamples/Samples/ShapefileSample.cs | 853 +++++++++--------- .../Samples/ShapefileSampleOsm.cs | 795 ++++++++-------- 4 files changed, 835 insertions(+), 1086 deletions(-) diff --git a/Examples/WinFormSamples/Form2.Designer.cs b/Examples/WinFormSamples/Form2.Designer.cs index e51cfd30..4fa0192a 100644 --- a/Examples/WinFormSamples/Form2.Designer.cs +++ b/Examples/WinFormSamples/Form2.Designer.cs @@ -148,7 +148,7 @@ private void InitializeComponent() // this.chkGraticule.Location = new System.Drawing.Point(13, 129); this.chkGraticule.Name = "chkGraticule"; - this.chkGraticule.Size = new System.Drawing.Size(156, 19); + this.chkGraticule.Size = new System.Drawing.Size(75, 19); this.chkGraticule.TabIndex = 5; this.chkGraticule.Text = "Graticule"; this.chkGraticule.UseVisualStyleBackColor = true; diff --git a/Examples/WinFormSamples/Form2.cs b/Examples/WinFormSamples/Form2.cs index e2ca1d27..3564a236 100644 --- a/Examples/WinFormSamples/Form2.cs +++ b/Examples/WinFormSamples/Form2.cs @@ -25,21 +25,11 @@ namespace WinFormSamples public partial class Form2 : Form { - private const double WebMercatorRadius = 6378137.0; - private readonly Envelope _webMercatorEnv = new Envelope(-20037508.34,20037508.34,-20000000,20000000); - private readonly Polygon _webMercatorPoly = null; - - private const int PowerRangeMin = -5; - private const int PowerRangeMax = 10; - private readonly double[] _niceNumberArray = {1, 2, 2.5, 5}; - public Form2() { this.InitializeComponent(); // this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); this.UpdateStyles(); - - _webMercatorPoly = EnvToPolygon(_webMercatorEnv); } private void Form2_Load(object sender, EventArgs e) @@ -62,9 +52,6 @@ private void Form2_Load(object sender, EventArgs e) pushPinLayer.DataSource = geoProvider; //this.mapBox1.Map.Layers.Add(pushPinLayer); - // ScaleGraticule - this.mapBox1.Map.Layers.AddCollection(CreateGraticuleLayers()); - // ScaleBar this.mapBox1.Map.SRID = 3857; this.mapBox1.Map.Decorations.Add( @@ -74,62 +61,17 @@ private void Form2_Load(object sender, EventArgs e) Enabled = chkScaleBar.Checked }); + // Graticule + this.mapBox1.Map.Decorations.Add(new Graticule() + { + Enabled = chkGraticule.Checked + }); + this.mapBox1.Map.ZoomToBox(geom); this.mapBox1.Map.Zoom = 8500; this.mapBox1.Refresh(); } - private LayerCollection CreateGraticuleLayers() - { - var layers = new LayerCollection(); - - // Graticule Layer - var graticuleLyr = new VectorLayer("Graticule"); - graticuleLyr.DataSource = CreateGraticuleDatasource(); - graticuleLyr.Style.Line.Color = Color.DarkSlateGray; - var majorIntStyle = new VectorStyle() - { - Line = new System.Drawing.Pen(Brushes.DarkBlue, 2) - }; - - var minorIntStyle = new VectorStyle() - { - Line = new System.Drawing.Pen(Brushes.DarkSlateGray, 1){DashStyle = DashStyle.Dash} - }; - - //Create the theme items - var dictStyles = new Dictionary(); - dictStyles.Add(true, majorIntStyle); - dictStyles.Add(false, minorIntStyle); - - //Assign the theme - graticuleLyr.Theme = - new SharpMap.Rendering.Thematics.UniqueValuesTheme("Major", dictStyles, minorIntStyle); - layers.Add(graticuleLyr); - - // labels - var labelLyr = new LabelLayer("Graticule Labels"); - labelLyr.DataSource = graticuleLyr.DataSource; - labelLyr.LabelColumn = "Label"; - labelLyr.LabelStringDelegate = row => ((bool)row["Major"] ? (string)row["Label"] : ""); - - var labelStyle = (LabelStyle) labelLyr.Style; - labelStyle.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; - labelStyle.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; - -// labelLyr.Style = new LabelStyle(); -// labelLyr.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.SimpleCollisionDetection; -// labelLyr.Style.CollisionDetection = true; -// labelLyr.Style.CollisionBuffer = new SizeF(2, 2); -// labelLyr.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; -// labelLyr.Styletyle.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; - - - layers.Add(labelLyr); - - return layers; - } - private void button4_Click(object sender, EventArgs e) { this.mapBox1.ActiveTool = MapBox.Tools.Pan; @@ -226,205 +168,10 @@ private void chkScaleBar_Checked(object sender, EventArgs e) private void chkGraticule_Checked(object sender, EventArgs e) { - foreach (var lyr in this.mapBox1.Map.Layers) - if (lyr.LayerName.StartsWith("Graticule")) - lyr.Enabled = chkGraticule.Checked; - - if (chkGraticule.Checked) - if (chkGraticule.Checked) DrawGraticule(); - + var graticule = mapBox1.Map.Decorations[1] as Graticule; + if (graticule == null) return; + graticule.Enabled = chkGraticule.Checked; this.mapBox1.Refresh(); } - - private GeometryFeatureProvider CreateGraticuleDatasource() - { - var fdt = new FeatureDataTable {TableName = "Graticule"}; - fdt.Columns.Add(new DataColumn("oid", typeof(uint))); - fdt.Columns[0].AutoIncrement = true; - - fdt.Columns.Add(new DataColumn("Label", typeof(string))); - fdt.Columns.Add(new DataColumn("Major", typeof(bool))); - - fdt.PrimaryKey = new[] {fdt.Columns[0]}; - - return new GeometryFeatureProvider(fdt); - - } - - private void DrawGraticule() - { - if (!chkGraticule.Checked) return; - - var mapExtentsEnv = this.mapBox1.Map.Envelope; - var mapExtentsPoly = EnvToPolygon(mapExtentsEnv); - - //var minSide = Math.Min(extents.Width, extents.Height); - var majorInt = CalcGraticuleInterval(mapExtentsEnv.Height / 2); - var minorInt = majorInt / 10; - this.chkGraticule.Text = $"Graticule ({minorInt:N0}m)"; - - var constrExtents = CalcContructionExtents(mapExtentsEnv, minorInt); - - var graticuleLyr = (VectorLayer) mapBox1.Map.Layers.GetLayerByName("Graticule"); - var gfp = (GeometryFeatureProvider) graticuleLyr.DataSource; - var fdt = gfp.Features; - lock (fdt.Rows.SyncRoot) - { - gfp.Features.Clear(); - gfp.Features.BeginLoadData(); - - // horizontal graticule CONSTRAINED to both Map extents AND _webMercatorExtents - for (var thisY = Math.Max(constrExtents.MinY, _webMercatorEnv.MinY); - thisY <= Math.Min(constrExtents.MaxY, _webMercatorEnv.MaxY); - thisY += minorInt) - { - if (thisY < mapExtentsEnv.MinY || thisY > mapExtentsEnv.MaxY) continue; - - var fdr = gfp.Features.NewRow(); - fdr["Label"] = $" {thisY:N0}"; - fdr["Major"] = (thisY % majorInt == 0) ? true: false; - fdr.Geometry = new LineString( - new[] - { - // NB intentional use of mapExtentsEnv (instead of constrExtents) - new Coordinate(Math.Max(mapExtentsEnv.MinX, _webMercatorEnv.MinX), thisY), - new Coordinate(Math.Min(mapExtentsEnv.MaxX, _webMercatorEnv.MaxX), thisY) - } - ); - gfp.Features.AddRow(fdr); - } - - // vertical graticule CLIPPED to _webMercatorPoly AND _mapExtentsPoly - for (var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += minorInt) - { - var geom = ConstructMeridianGraticule(thisX, minorInt, constrExtents, mapExtentsPoly); - if (geom == null || geom.IsEmpty) continue; - - var fdr = gfp.Features.NewRow(); - fdr["Label"] = $" {thisX:N0}"; - fdr["Major"] = (thisX % majorInt == 0) ? true: false; - fdr.Geometry = geom; - gfp.Features.AddRow(fdr); - - } - - gfp.Features.EndLoadData(); - } - } - - private Polygon EnvToPolygon(Envelope env) - { - var linearRing = new LinearRing(new Coordinate[] - { - new Coordinate(env.BottomLeft()), - new Coordinate(env.TopLeft()), - new Coordinate(env.TopRight()), - new Coordinate(env.BottomRight()), - new Coordinate(env.BottomLeft()) - }); - return new Polygon(linearRing); - } - - private Envelope CalcContructionExtents(Envelope extents, double minorInt) - { - - // Y extents expanded to next increment of minorInt - var minY= Math.Floor(extents.MinY / minorInt) * minorInt; - if (extents.MinY < 0) minY -= minorInt; - - var maxY = Math.Ceiling(extents.MaxY / minorInt) * minorInt; - if (extents.MaxY < 0) maxY += minorInt; - - // X extents more complicated - double lowerLeftX, upperLeftX, upperRightX, lowerRightX; - - if (Math.Max(extents.MinX, _webMercatorEnv.MinX) < 0 && - Math.Max(extents.MinY, _webMercatorEnv.MinY) < 0 && - Math.Min(extents.MaxY , _webMercatorEnv.MaxY) >= 0) - { - // LHS extents lies to the left of central meridian with vt extent spanning equator - lowerLeftX = upperLeftX = Math.Max(extents.MinX, _webMercatorEnv.MinX); - } - else - { - lowerLeftX = CalcEquatorialX(extents.BottomLeft()); - upperLeftX = CalcEquatorialX(extents.TopLeft()); - } - - if (Math.Min(extents.MaxX, _webMercatorEnv.MaxX) >= 0 && - Math.Max(extents.MinY, _webMercatorEnv.MinY) < 0 && - Math.Min(extents.MaxY , _webMercatorEnv.MaxY) >= 0) - { - // RHS extents lists to right of central meridian with vt extent spanning equator - lowerRightX = upperRightX = Math.Min(extents.MaxX, _webMercatorEnv.MaxX); - } - else - { - lowerRightX = CalcEquatorialX(extents.BottomRight()); - upperRightX = CalcEquatorialX(extents.TopRight()); - } - - // X extents expanded to next largest increment of minorInt - var minX = Math.Floor(Math.Abs(Math.Min(lowerLeftX, upperLeftX)) / minorInt) * minorInt; - if (Math.Min(lowerLeftX, upperLeftX) < 0) minX *= -1; - - var maxX = Math.Ceiling(Math.Abs(Math.Max(lowerRightX, upperRightX)) / minorInt) * minorInt; - if (Math.Max(lowerRightX, upperRightX) < 0) maxX *= -1; - - // envelope MAY exceed _webMercatorExtents. Dangles will be clipped when drawing geometry. - return new Envelope(minX, maxX, minY, maxY); - - } - - private double CalcEquatorialX(Coordinate coord) - { - var scaleFactor = Math.Cosh(Math.Abs(coord.Y) / WebMercatorRadius); - return coord.X / scaleFactor; - } - - private double CalcScaleCorrectedX(double x, double y) - { - var scaleFactor = Math.Cosh(Math.Abs(y) / WebMercatorRadius); - return x * scaleFactor; - } - - private IGeometry ConstructMeridianGraticule(double thisX, double minorInt, Envelope constrExtents, Polygon mapExtents) - { - var coords = new CoordinateList(); - - var thisY = constrExtents.MinY; - while (thisY <= constrExtents.MaxY) - { - coords.Add(new Coordinate(CalcScaleCorrectedX(thisX, thisY), thisY)); - thisY += minorInt; - } - - var graticule = (IGeometry) new LineString(coords.ToArray()); - if (!_webMercatorEnv.Contains(graticule.EnvelopeInternal)) - graticule = _webMercatorPoly.Intersection(graticule); - - if (!mapExtents.EnvelopeInternal.Contains(graticule.EnvelopeInternal)) - graticule = mapExtents.Intersection(graticule); - - return graticule; - } - - private double CalcGraticuleInterval(double maxInterval) - { - int y; //power of 10. Range of -5 to 10 gives huge scale range. - double candidate = 0d; //Candidate value for new interval. - for (y = PowerRangeMax; y >= PowerRangeMin; y--) - { - double multiplier = Math.Pow(10, y); //Mulitiplier, =10^exp, to apply to nice numbers. - foreach (var niceNumber in _niceNumberArray.Reverse()) - { - candidate = niceNumber * multiplier; - if (candidate <= maxInterval) - return candidate; - } - } - - return candidate; //return the maximum - } } } diff --git a/Examples/WinFormSamples/Samples/ShapefileSample.cs b/Examples/WinFormSamples/Samples/ShapefileSample.cs index 6f77700c..af019312 100644 --- a/Examples/WinFormSamples/Samples/ShapefileSample.cs +++ b/Examples/WinFormSamples/Samples/ShapefileSample.cs @@ -1,426 +1,427 @@ -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Text; -using SharpMap; -using SharpMap.Data; -using SharpMap.Data.Providers; -using SharpMap.Layers; -using SharpMap.Rendering; -using SharpMap.Rendering.Symbolizer; -using SharpMap.Rendering.Thematics; -using SharpMap.Styles; -using Point = GeoAPI.Geometries.Coordinate; - -namespace WinFormSamples.Samples -{ - public static partial class ShapefileSample - { - private static int _mapId = 0; - public static Map InitializeMap(float angle) - { - switch (_mapId) - { - case 0: - _mapId++; - return InitializeMapOrig(angle); - case 1: - _mapId++; - return InitializeMapOsm(angle); - case 2: - _mapId++; - return InitializeMapOsm(angle); - //return InitializeMapSharpDX(angle); - case 3: - _mapId -= 3; - return InitializeMapWithSymbolizerLayers(angle); - default: - _mapId = 0; - return InitializeMapOrig(angle); - } - } - - private static Map InitializeMapWithSymbolizerLayers(float angle) - { - //Initialize a new map of size 'imagesize' - Map map = new Map(); - - //Set up the countries layer - var layCountries = new SharpMap.Layers.Symbolizer.PolygonalVectorLayer( - "Countries", - new ShapeFile("GeoData/World/countries.shp", true), - new BasicPolygonSymbolizer {Fill = new SolidBrush(Color.Green), Outline = Pens.Black,} - ) {SRID = 4326}; - - //Set up a river layer - var symbolizer = new CachedLineSymbolizer(); - symbolizer.LineSymbolizeHandlers.AddRange( new [] { - new PlainLineSymbolizeHandler { Line = new Pen(Color.Blue, 3) { LineJoin = LineJoin.Round } }, - new PlainLineSymbolizeHandler{ Line = new Pen(Color.Aqua, 1)}, }); - - var layRivers = new SharpMap.Layers.Symbolizer.LinealVectorLayer("Rivers") - { - //Set the datasource to a shapefile in the App_data folder - DataSource = new ShapeFile("GeoData/World/rivers.shp", true), - //Define a blue 2px wide pen - Symbolizer = symbolizer, - SRID = 4326 - }; - - //Set up a cities layer - var layCities = new SharpMap.Layers.Symbolizer.PuntalVectorLayer("Cities") - { - //Set the datasource to a shapefile in the App_data folder - DataSource = new ShapeFile("GeoData/World/cities.shp", true), - Symbolizer = new RasterPointSymbolizer() { Scale = 0.8f }, - MaxVisible = 40 - } ; - - //Set up a country label layer - var layLabel = new LabelLayer("Country labels") - { - DataSource = layCountries.DataSource, - Enabled = true, - LabelColumn = "Name", - Style = - new LabelStyle - { - ForeColor = Color.White, - Font = new Font(FontFamily.GenericSerif, 12), - BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center - }, - MaxVisible = 90, - MinVisible = 30, - SRID = 4326, - MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest, - - }; - - //Set up a city label layer - var layCityLabel = new LabelLayer("City labels") - { - DataSource = layCities.DataSource, - Enabled = true, - LabelColumn = "Name", - TextRenderingHint = TextRenderingHint.AntiAlias, - SmoothingMode = SmoothingMode.AntiAlias, - SRID = 4326, - LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, - Style = - new LabelStyle - { - ForeColor = Color.Black, - Font = new Font(FontFamily.GenericSerif, 11), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left, - VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom, - Offset = new PointF(3, 3), - CollisionDetection = true, - Halo = new Pen(Color.Yellow, 2) - }, - MaxVisible = layLabel.MinVisible, - }; - - //Setup River label - var layRiverLabel = new LabelLayer("River labels") - { - DataSource = layRivers.DataSource, - Enabled = true, - LabelColumn = "Name", - TextRenderingHint = TextRenderingHint.AntiAlias, - SmoothingMode = SmoothingMode.AntiAlias, - SRID = 4326, - LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, - MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.All, - Style = - new LabelStyle - { - ForeColor = Color.DarkBlue, - Font = new Font(FontFamily.GenericSansSerif, 11), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, - VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, - //CollisionDetection = true, - Halo = new Pen(Color.Azure, 2), - IgnoreLength = true - - }, - }; - - //Add the layers to the map object. - //The order we add them in are the order they are drawn, so we add the rivers last to put them on top - map.Layers.Add(layCountries); - map.Layers.Add(layRivers); - map.Layers.Add(layCities); - map.Layers.Add(layRiverLabel); - map.Layers.Add(layLabel); - map.Layers.Add(layCityLabel); - - - //limit the zoom to 360 degrees width - map.MaximumZoom = 360; - map.BackColor = Color.LightBlue; - - map.Zoom = 360; - map.Center = new Point(0, 0); - - Matrix mat = new Matrix(); - mat.RotateAt(angle, map.WorldToImage(map.Center)); - map.MapTransform = mat; - - return map; - } - private static Map InitializeMapOrig(float angle) - { - //Initialize a new map of size 'imagesize' - Map map = new Map(); - - //Set up the countries layer - VectorLayer layCountries = new VectorLayer("Countries"); - //Set the datasource to a shapefile in the App_data folder - layCountries.DataSource = new ShapeFile("GeoData/World/countries.shp", true); - //Set fill-style to green - layCountries.Style.Fill = new SolidBrush(Color.FromArgb(64, Color.Green)); - //Set the polygons to have a black outline - layCountries.Style.Outline = Pens.Black; - layCountries.Style.EnableOutline = true; - layCountries.SRID = 4326; - - //Set up a river layer - VectorLayer layRivers = new VectorLayer("Rivers"); - //Set the datasource to a shapefile in the App_data folder - layRivers.DataSource = new ShapeFile("GeoData/World/rivers.shp", true); - //Define a blue 1px wide pen - layRivers.Style.Line = new Pen(Color.Blue, 1); - layRivers.SRID = 4326; - - //Set up a cities layer - VectorLayer layCities = new VectorLayer("Cities"); - //Set the datasource to a shapefile in the App_data folder - layCities.DataSource = new ShapeFile("GeoData/World/cities.shp", true); - layCities.Style.SymbolScale = 0.8f; - layCities.MaxVisible = 40; - layCities.SRID = 4326; - - //Set up a country label layer - LabelLayer layLabel = new LabelLayer("Country labels"); - layLabel.DataSource = layCountries.DataSource; - layLabel.Enabled = true; - layLabel.LabelColumn = "Name"; - layLabel.Style = new LabelStyle(); - layLabel.Style.ForeColor = Color.White; - layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); - layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)); - layLabel.MaxVisible = 90; - layLabel.MinVisible = 30; - layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; - layLabel.SRID = 4326; - layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; - layLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; - layLabel.Style.CollisionDetection = true; - layLabel.LabelPositionDelegate = fdr => fdr.Geometry.InteriorPoint.Coordinate; - layLabel.PriorityColumn = "POPDENS"; - - //Set up a city label layer - LabelLayer layCityLabel = new LabelLayer("City labels"); - layCityLabel.DataSource = layCities.DataSource; - layCityLabel.Enabled = true; - layCityLabel.LabelColumn = "Name"; - layCityLabel.Style = new LabelStyle(); - layCityLabel.Style.ForeColor = Color.Black; - layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); - layCityLabel.MaxVisible = layLabel.MinVisible; - layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; - layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; - layCityLabel.Style.Offset = new PointF(3, 3); - layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); - layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias; - layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; - layCityLabel.SRID = 4326; - layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; - layCityLabel.Style.CollisionDetection = true; - layCityLabel.PriorityColumn = "POPULATION"; - layCityLabel.Theme = new GradientTheme(layCityLabel.PriorityColumn, 250000, 5000000, - new LabelStyle - { - MaxVisible = 10, - CollisionBuffer = new Size(0, 0), CollisionDetection = true, Enabled = true, - ForeColor = Color.LightSlateGray, Halo = new Pen(Color.Silver, 1), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, - VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, - Font = new Font(GenericFontFamilies.SansSerif.ToString(), 8f, FontStyle.Regular) - } , - new LabelStyle - { - MaxVisible = layLabel.MinVisible, - CollisionBuffer = new Size(3, 3), CollisionDetection = true, Enabled = true, - ForeColor = Color.LightSlateGray, Halo = new Pen(Color.Silver, 5), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, - VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, - Font = new Font(GenericFontFamilies.SansSerif.ToString(), 16f, FontStyle.Bold) - }); - - bool ignoreLength = false; - - var layRiverLabel = new LabelLayer("River labels") - { - DataSource = layRivers.DataSource, - Enabled = true, - LabelColumn = "Name", - TextRenderingHint = TextRenderingHint.AntiAlias, - SmoothingMode = SmoothingMode.AntiAlias, - SRID = 4326, - LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, - MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.CommonCenter, - Style = - new LabelStyle - { - ForeColor = Color.DarkBlue, - Font = new Font(FontFamily.GenericSansSerif, 11), - HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, - VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, - //CollisionDetection = true, - Halo = new Pen(Color.Azure, 2), - IgnoreLength = ignoreLength, - Offset = new PointF(0, -10) - - }, - }; - - //Add the layers to the map object. - //The order we add them in are the order they are drawn, so we add the rivers last to put them on top - //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries)); - map.Layers.Add(layCountries); - map.Layers.Add(layRivers); - map.Layers.Add(layCities); - map.Layers.Add(layLabel); - map.Layers.Add(layCityLabel); - map.Layers.Add(layRiverLabel); - - - //limit the zoom to 360 degrees width - map.MaximumZoom = 360; - map.BackColor = Color.LightBlue; - - map.Zoom = 360; - map.Center = new Point(0, 0); - - Matrix mat = new Matrix(); - mat.RotateAt(angle, map.WorldToImage(map.Center)); - map.MapTransform = mat; - - return map; - } - - /* - private static Map InitializeMapSharpDX(float angle) - { - //Initialize a new map of size 'imagesize' - Map map = new Map(); - - //Set up the countries layer - VectorLayer layCountries = new SharpDXVectorLayer("Countries"); - //Set the datasource to a shapefile in the App_data folder - layCountries.DataSource = new ShapeFile("GeoData/World/countries.shp", true); - //Set fill-style to green - layCountries.Style.Fill = new SolidBrush(Color.FromArgb(64, Color.LimeGreen)); - //Set the polygons to have a black outline - layCountries.Style.Outline = Pens.Black; - layCountries.Style.EnableOutline = true; - layCountries.SRID = 4326; - - //Set up a river layer - VectorLayer layRivers = new SharpDXVectorLayer("Rivers"); - //Set the datasource to a shapefile in the App_data folder - layRivers.DataSource = new ShapeFile("GeoData/World/rivers.shp", true); - //Define a blue 1px wide pen - layRivers.Style.Line = new Pen(Color.Blue, 1); - layRivers.SRID = 4326; - - //Set up a cities layer - VectorLayer layCities = new SharpDXVectorLayer("Cities"); - //Set the datasource to a shapefile in the App_data folder - layCities.DataSource = new ShapeFile("GeoData/World/cities.shp", true); - layCities.Style.SymbolScale = 0.8f; - layCities.MaxVisible = 40; - layCities.SRID = 4326; - - //Set up a country label layer - LabelLayer layLabel = new LabelLayer("Country labels"); - layLabel.DataSource = layCountries.DataSource; - layLabel.Enabled = true; - layLabel.LabelColumn = "Name"; - layLabel.Style = new LabelStyle(); - layLabel.Style.ForeColor = Color.White; - layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); - layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)); - layLabel.MaxVisible = 90; - layLabel.MinVisible = 30; - layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; - layLabel.SRID = 4326; - layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; - - //Set up a city label layer - LabelLayer layCityLabel = new LabelLayer("City labels"); - layCityLabel.DataSource = layCities.DataSource; - layCityLabel.Enabled = true; - layCityLabel.LabelColumn = "Name"; - layCityLabel.Style = new LabelStyle(); - layCityLabel.Style.ForeColor = Color.Black; - layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); - layCityLabel.MaxVisible = layLabel.MinVisible; - layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; - layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; - layCityLabel.Style.Offset = new PointF(3, 3); - layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); - layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias; - layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; - layCityLabel.SRID = 4326; - layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; - layCityLabel.Style.CollisionDetection = true; - - //Add the layers to the map object. - //The order we add them in are the order they are drawn, so we add the rivers last to put them on top - //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries)); - map.Layers.Add(layCountries); - map.Layers.Add(layRivers); - map.Layers.Add(layCities); - map.Layers.Add(layLabel); - map.Layers.Add(layCityLabel); - - - //limit the zoom to 360 degrees width - map.MaximumZoom = 360; - map.BackColor = Color.LightBlue; - - map.Zoom = 360; - map.Center = new Point(0, 0); - - Matrix mat = new Matrix(); - mat.RotateAt(angle, map.WorldToImage(map.Center)); - map.MapTransform = mat; - - return map; - } - */ - internal static Map InitializeMap(float angle, string[] filenames) - { - if (filenames == null) - return null; - - var providers = new SharpMap.Data.Providers.ShapeFile[filenames.Length]; - for (int i = 0; i < filenames.Length; i++) - { - providers[i] = new ShapeFile(filenames[i], true, false); - providers[i].Open(); - } - - var map = LayerTools.GetMapForProviders(providers); - - Matrix mat = new Matrix(); - mat.RotateAt(angle, map.WorldToImage(map.Center)); - map.MapTransform = mat; - - return map; - } - } -} \ No newline at end of file +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Text; +using SharpMap; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering; +using SharpMap.Rendering.Symbolizer; +using SharpMap.Rendering.Thematics; +using SharpMap.Styles; +using Point = GeoAPI.Geometries.Coordinate; + +namespace WinFormSamples.Samples +{ + public static partial class ShapefileSample + { + private static int _mapId = 0; + public static Map InitializeMap(float angle) + { + switch (_mapId) + { + case 0: + _mapId++; + return InitializeMapOrig(angle); + case 1: + _mapId++; + return InitializeMapOsm(angle); + case 2: + _mapId++; + return InitializeMapOsm(angle); + //return InitializeMapSharpDX(angle); + case 3: + _mapId -= 3; + return InitializeMapWithSymbolizerLayers(angle); + default: + _mapId = 0; + return InitializeMapOrig(angle); + } + } + + private static Map InitializeMapWithSymbolizerLayers(float angle) + { + //Initialize a new map of size 'imagesize' + Map map = new Map(); + + //Set up the countries layer + var layCountries = new SharpMap.Layers.Symbolizer.PolygonalVectorLayer( + "Countries", + new ShapeFile("GeoData/World/countries.shp", true), + new BasicPolygonSymbolizer {Fill = new SolidBrush(Color.Green), Outline = Pens.Black,} + ) {SRID = 4326}; + + //Set up a river layer + var symbolizer = new CachedLineSymbolizer(); + symbolizer.LineSymbolizeHandlers.AddRange( new [] { + new PlainLineSymbolizeHandler { Line = new Pen(Color.Blue, 3) { LineJoin = LineJoin.Round } }, + new PlainLineSymbolizeHandler{ Line = new Pen(Color.Aqua, 1)}, }); + + var layRivers = new SharpMap.Layers.Symbolizer.LinealVectorLayer("Rivers") + { + //Set the datasource to a shapefile in the App_data folder + DataSource = new ShapeFile("GeoData/World/rivers.shp", true), + //Define a blue 2px wide pen + Symbolizer = symbolizer, + SRID = 4326 + }; + + //Set up a cities layer + var layCities = new SharpMap.Layers.Symbolizer.PuntalVectorLayer("Cities") + { + //Set the datasource to a shapefile in the App_data folder + DataSource = new ShapeFile("GeoData/World/cities.shp", true), + Symbolizer = new RasterPointSymbolizer() { Scale = 0.8f }, + MaxVisible = 40 + } ; + + //Set up a country label layer + var layLabel = new LabelLayer("Country labels") + { + DataSource = layCountries.DataSource, + Enabled = true, + LabelColumn = "Name", + Style = + new LabelStyle + { + ForeColor = Color.White, + Font = new Font(FontFamily.GenericSerif, 12), + BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center + }, + MaxVisible = 90, + MinVisible = 30, + SRID = 4326, + MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest, + + }; + + //Set up a city label layer + var layCityLabel = new LabelLayer("City labels") + { + DataSource = layCities.DataSource, + Enabled = true, + LabelColumn = "Name", + TextRenderingHint = TextRenderingHint.AntiAlias, + SmoothingMode = SmoothingMode.AntiAlias, + SRID = 4326, + LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, + Style = + new LabelStyle + { + ForeColor = Color.Black, + Font = new Font(FontFamily.GenericSerif, 11), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom, + Offset = new PointF(3, 3), + CollisionDetection = true, + Halo = new Pen(Color.Yellow, 2) + }, + MaxVisible = layLabel.MinVisible, + }; + + //Setup River label + var layRiverLabel = new LabelLayer("River labels") + { + DataSource = layRivers.DataSource, + Enabled = true, + LabelColumn = "Name", + TextRenderingHint = TextRenderingHint.AntiAlias, + SmoothingMode = SmoothingMode.AntiAlias, + SRID = 4326, + LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, + MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.All, + Style = + new LabelStyle + { + ForeColor = Color.DarkBlue, + Font = new Font(FontFamily.GenericSansSerif, 11), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, + //CollisionDetection = true, + Halo = new Pen(Color.Azure, 2), + IgnoreLength = true + + }, + }; + + //Add the layers to the map object. + //The order we add them in are the order they are drawn, so we add the rivers last to put them on top + map.Layers.Add(layCountries); + map.Layers.Add(layRivers); + map.Layers.Add(layCities); + map.Layers.Add(layRiverLabel); + map.Layers.Add(layLabel); + map.Layers.Add(layCityLabel); + + + //limit the zoom to 360 degrees width + map.MaximumZoom = 360; + map.BackColor = Color.LightBlue; + + map.Zoom = 360; + map.Center = new Point(0, 0); + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + private static Map InitializeMapOrig(float angle) + { + //Initialize a new map of size 'imagesize' + Map map = new Map(); + map.SRID = 4326; + + //Set up the countries layer + VectorLayer layCountries = new VectorLayer("Countries"); + //Set the datasource to a shapefile in the App_data folder + layCountries.DataSource = new ShapeFile("GeoData/World/countries.shp", true); + //Set fill-style to green + layCountries.Style.Fill = new SolidBrush(Color.FromArgb(64, Color.Green)); + //Set the polygons to have a black outline + layCountries.Style.Outline = Pens.Black; + layCountries.Style.EnableOutline = true; + layCountries.SRID = 4326; + + //Set up a river layer + VectorLayer layRivers = new VectorLayer("Rivers"); + //Set the datasource to a shapefile in the App_data folder + layRivers.DataSource = new ShapeFile("GeoData/World/rivers.shp", true); + //Define a blue 1px wide pen + layRivers.Style.Line = new Pen(Color.Blue, 1); + layRivers.SRID = 4326; + + //Set up a cities layer + VectorLayer layCities = new VectorLayer("Cities"); + //Set the datasource to a shapefile in the App_data folder + layCities.DataSource = new ShapeFile("GeoData/World/cities.shp", true); + layCities.Style.SymbolScale = 0.8f; + layCities.MaxVisible = 40; + layCities.SRID = 4326; + + //Set up a country label layer + LabelLayer layLabel = new LabelLayer("Country labels"); + layLabel.DataSource = layCountries.DataSource; + layLabel.Enabled = true; + layLabel.LabelColumn = "Name"; + layLabel.Style = new LabelStyle(); + layLabel.Style.ForeColor = Color.White; + layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); + layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)); + layLabel.MaxVisible = 90; + layLabel.MinVisible = 30; + layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; + layLabel.SRID = 4326; + layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; + layLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; + layLabel.Style.CollisionDetection = true; + layLabel.LabelPositionDelegate = fdr => fdr.Geometry.InteriorPoint.Coordinate; + layLabel.PriorityColumn = "POPDENS"; + + //Set up a city label layer + LabelLayer layCityLabel = new LabelLayer("City labels"); + layCityLabel.DataSource = layCities.DataSource; + layCityLabel.Enabled = true; + layCityLabel.LabelColumn = "Name"; + layCityLabel.Style = new LabelStyle(); + layCityLabel.Style.ForeColor = Color.Black; + layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); + layCityLabel.MaxVisible = layLabel.MinVisible; + layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; + layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; + layCityLabel.Style.Offset = new PointF(3, 3); + layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); + layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias; + layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; + layCityLabel.SRID = 4326; + layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; + layCityLabel.Style.CollisionDetection = true; + layCityLabel.PriorityColumn = "POPULATION"; + layCityLabel.Theme = new GradientTheme(layCityLabel.PriorityColumn, 250000, 5000000, + new LabelStyle + { + MaxVisible = 10, + CollisionBuffer = new Size(0, 0), CollisionDetection = true, Enabled = true, + ForeColor = Color.LightSlateGray, Halo = new Pen(Color.Silver, 1), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, + Font = new Font(GenericFontFamilies.SansSerif.ToString(), 8f, FontStyle.Regular) + } , + new LabelStyle + { + MaxVisible = layLabel.MinVisible, + CollisionBuffer = new Size(3, 3), CollisionDetection = true, Enabled = true, + ForeColor = Color.LightSlateGray, Halo = new Pen(Color.Silver, 5), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, + Font = new Font(GenericFontFamilies.SansSerif.ToString(), 16f, FontStyle.Bold) + }); + + bool ignoreLength = false; + + var layRiverLabel = new LabelLayer("River labels") + { + DataSource = layRivers.DataSource, + Enabled = true, + LabelColumn = "Name", + TextRenderingHint = TextRenderingHint.AntiAlias, + SmoothingMode = SmoothingMode.AntiAlias, + SRID = 4326, + LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection, + MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.CommonCenter, + Style = + new LabelStyle + { + ForeColor = Color.DarkBlue, + Font = new Font(FontFamily.GenericSansSerif, 11), + HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center, + VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle, + //CollisionDetection = true, + Halo = new Pen(Color.Azure, 2), + IgnoreLength = ignoreLength, + Offset = new PointF(0, -10) + + }, + }; + + //Add the layers to the map object. + //The order we add them in are the order they are drawn, so we add the rivers last to put them on top + //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries)); + map.Layers.Add(layCountries); + map.Layers.Add(layRivers); + map.Layers.Add(layCities); + map.Layers.Add(layLabel); + map.Layers.Add(layCityLabel); + map.Layers.Add(layRiverLabel); + + + //limit the zoom to 360 degrees width + map.MaximumZoom = 360; + map.BackColor = Color.LightBlue; + + map.Zoom = 360; + map.Center = new Point(0, 0); + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + + /* + private static Map InitializeMapSharpDX(float angle) + { + //Initialize a new map of size 'imagesize' + Map map = new Map(); + + //Set up the countries layer + VectorLayer layCountries = new SharpDXVectorLayer("Countries"); + //Set the datasource to a shapefile in the App_data folder + layCountries.DataSource = new ShapeFile("GeoData/World/countries.shp", true); + //Set fill-style to green + layCountries.Style.Fill = new SolidBrush(Color.FromArgb(64, Color.LimeGreen)); + //Set the polygons to have a black outline + layCountries.Style.Outline = Pens.Black; + layCountries.Style.EnableOutline = true; + layCountries.SRID = 4326; + + //Set up a river layer + VectorLayer layRivers = new SharpDXVectorLayer("Rivers"); + //Set the datasource to a shapefile in the App_data folder + layRivers.DataSource = new ShapeFile("GeoData/World/rivers.shp", true); + //Define a blue 1px wide pen + layRivers.Style.Line = new Pen(Color.Blue, 1); + layRivers.SRID = 4326; + + //Set up a cities layer + VectorLayer layCities = new SharpDXVectorLayer("Cities"); + //Set the datasource to a shapefile in the App_data folder + layCities.DataSource = new ShapeFile("GeoData/World/cities.shp", true); + layCities.Style.SymbolScale = 0.8f; + layCities.MaxVisible = 40; + layCities.SRID = 4326; + + //Set up a country label layer + LabelLayer layLabel = new LabelLayer("Country labels"); + layLabel.DataSource = layCountries.DataSource; + layLabel.Enabled = true; + layLabel.LabelColumn = "Name"; + layLabel.Style = new LabelStyle(); + layLabel.Style.ForeColor = Color.White; + layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12); + layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)); + layLabel.MaxVisible = 90; + layLabel.MinVisible = 30; + layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center; + layLabel.SRID = 4326; + layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest; + + //Set up a city label layer + LabelLayer layCityLabel = new LabelLayer("City labels"); + layCityLabel.DataSource = layCities.DataSource; + layCityLabel.Enabled = true; + layCityLabel.LabelColumn = "Name"; + layCityLabel.Style = new LabelStyle(); + layCityLabel.Style.ForeColor = Color.Black; + layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11); + layCityLabel.MaxVisible = layLabel.MinVisible; + layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left; + layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom; + layCityLabel.Style.Offset = new PointF(3, 3); + layCityLabel.Style.Halo = new Pen(Color.Yellow, 2); + layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias; + layCityLabel.SmoothingMode = SmoothingMode.AntiAlias; + layCityLabel.SRID = 4326; + layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection; + layCityLabel.Style.CollisionDetection = true; + + //Add the layers to the map object. + //The order we add them in are the order they are drawn, so we add the rivers last to put them on top + //map.BackgroundLayer.Add(AsyncLayerProxyLayer.Create(layCountries)); + map.Layers.Add(layCountries); + map.Layers.Add(layRivers); + map.Layers.Add(layCities); + map.Layers.Add(layLabel); + map.Layers.Add(layCityLabel); + + + //limit the zoom to 360 degrees width + map.MaximumZoom = 360; + map.BackColor = Color.LightBlue; + + map.Zoom = 360; + map.Center = new Point(0, 0); + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + */ + internal static Map InitializeMap(float angle, string[] filenames) + { + if (filenames == null) + return null; + + var providers = new SharpMap.Data.Providers.ShapeFile[filenames.Length]; + for (int i = 0; i < filenames.Length; i++) + { + providers[i] = new ShapeFile(filenames[i], true, false); + providers[i].Open(); + } + + var map = LayerTools.GetMapForProviders(providers); + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + } +} diff --git a/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs b/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs index e87ebcf1..5c1efa20 100644 --- a/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs +++ b/Examples/WinFormSamples/Samples/ShapefileSampleOsm.cs @@ -1,397 +1,398 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Timers; -using SharpMap; -using SharpMap.Data; -using SharpMap.Data.Providers; -using SharpMap.Layers; -using SharpMap.Rendering.Decoration; -using SharpMap.Rendering.Thematics; -using SharpMap.Styles; - -namespace WinFormSamples.Samples -{ - public static partial class ShapefileSample - { - //Disclaimer - //The used GeoData is from www.openstreetmap.org licenced CC-by-SA - //Transformed to shapefile by Geofabrik (http://www.geofabrik.de) - public const string PathOsm = "GeoData/OSM"; - - - private static GeoAPI.Geometries.Envelope _roadsExtents; - - //Could have used SharpMap.Rendering.Thematics.CustomTheme, - //but that one does not perserve styles for fast retrieval. - //Maybe a category theme would be a good idea... - private delegate IStyle GetStyleHandler(FeatureDataRow row); - class ThemeViaDelegate : ITheme - { - public GetStyleHandler GetStyleFunction; - private readonly IStyle _default; - private readonly String _columnName; - private readonly IDictionary _stylePreserver; - - public ThemeViaDelegate(IStyle defaultStyle, String columnName) - { - _default = defaultStyle; - _stylePreserver = new Dictionary(); - _columnName = columnName; - } - - - #region Implementation of ITheme - - public IStyle GetStyle(FeatureDataRow attribute) - { - IStyle returnStyle; - String value = Convert.ToString(attribute[_columnName]); - if (!_stylePreserver.TryGetValue(value, out returnStyle)) - { - if (GetStyleFunction != null) - { - returnStyle = GetStyleFunction(attribute); - if (returnStyle == null) returnStyle = _default; - _stylePreserver.Add(value, returnStyle); - } - else - returnStyle = _default; - } - //returnStyle.MinVisible = _default.MinVisible; - //returnStyle.MaxVisible = _default.MaxVisible; - return returnStyle; - } - - #endregion - } - - - private static Map InitializeMapOsm(float angle) - { - //Transparent style - VectorStyle transparentStyle = new VectorStyle(); - transparentStyle.Fill = Brushes.Transparent; - transparentStyle.EnableOutline = true; //otherwise all the fancy theming stuff won't work! - transparentStyle.Line.Brush = Brushes.Transparent; - transparentStyle.Outline.Brush = Brushes.Transparent; - transparentStyle.Symbol = null; - - VectorStyle transparentStyle2 = new VectorStyle(); - transparentStyle2.Fill = Brushes.Transparent; - transparentStyle2.EnableOutline = true; //otherwise all the fancy theming stuff won't work! - transparentStyle2.Line.Brush = Brushes.Transparent; - transparentStyle2.Outline.Brush = Brushes.Transparent; - transparentStyle2.Symbol = null; - - //Initialize a new map - Map map = new Map(); - map.BackColor = Color.Cornsilk; - - var encoding = System.Text.Encoding.UTF8; - - //Set up the countries layer - VectorLayer layNatural = new VectorLayer("Natural"); - //Set the datasource to a shapefile in the App_data folder - layNatural.DataSource = new ShapeFile(string.Format("{0}/natural.shp", PathOsm), true) { Encoding = encoding }; - //Set default style to draw nothing - layNatural.Style = transparentStyle; - //Set theme - ThemeViaDelegate theme = new ThemeViaDelegate(layNatural.Style, "type"); - theme.GetStyleFunction = delegate(FeatureDataRow row) - { - string caseVal = (String)row["type"]; - caseVal = caseVal.ToLowerInvariant(); - VectorStyle returnStyle = new VectorStyle(); - - switch (caseVal) - { - case "forest": - returnStyle.Fill = Brushes.ForestGreen; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.DarkGreen; - break; - case "water": - returnStyle.Fill = Brushes.Aqua; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.DarkBlue; - break; - case "riverbank": - returnStyle.Fill = Brushes.Peru; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.OrangeRed; - break; - case "park": - returnStyle.Fill = Brushes.PaleGreen; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.DarkGreen; - break; - default: - returnStyle = null; - break; - } - return returnStyle; - }; - layNatural.Theme = theme; - layNatural.SRID = 31466; - - VectorLayer layRoads = new VectorLayer("Roads"); - layRoads.DataSource = new ShapeFile(string.Format("{0}/roads.shp", PathOsm)) { Encoding = encoding }; - layRoads.DataSource.Open(); - _roadsExtents = layRoads.DataSource.GetExtents(); - //layRoads.DataSource.Close(); - layRoads.Style = transparentStyle; - ThemeViaDelegate themeRoads = new ThemeViaDelegate(transparentStyle, "type"); - themeRoads.GetStyleFunction = delegate(FeatureDataRow row) - { - VectorStyle returnStyle = new VectorStyle(); - - switch ((String)row["type"]) - { - case "rail": - returnStyle.Fill = Brushes.White; - returnStyle.Line.DashPattern = new float[] { 4f, 4f };//;System.Drawing.Drawing2D.DashStyle.Dash; - returnStyle.Line.Width = 4; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.Black; - returnStyle.Outline.Width = 6; - break; - case "canal": - returnStyle.Fill = Brushes.Aqua; - returnStyle.Outline.Brush = Brushes.DarkBlue; - returnStyle.Outline.Width = 5; - break; - case "cycleway": - case "footway": - case "pedestrian": - returnStyle.Line.Brush = Brushes.DarkGray; - returnStyle.Line.DashStyle = - DashStyle.Dot; - returnStyle.Line.Width = 1; - returnStyle.MaxVisible = _roadsExtents.Width * 0.05d; - break; - case "living_street": - case "residential": - returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; - returnStyle.Line.Width = 2; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.DarkGray; - returnStyle.Outline.Width = 4; - returnStyle.MaxVisible = _roadsExtents.Width * 0.15d; - break; - case "primary": - returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; - returnStyle.Line.Width = 7; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.Black; - returnStyle.Outline.Width = 11; - break; - case "secondary": - returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; - returnStyle.Line.Width = 6; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.Black; - returnStyle.MaxVisible = _roadsExtents.Width * 0.3d; - returnStyle.Outline.Width = 10; - break; - case "tertiary": - returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; - returnStyle.Line.Width = 5; - returnStyle.EnableOutline = true; - returnStyle.Outline.Brush = Brushes.Black; - returnStyle.MaxVisible = _roadsExtents.Width * 0.6d; - returnStyle.Outline.Width = 9; - break; - case "path": - case "track": - case "unclassified": - returnStyle.Line.Brush = Brushes.DarkGray; - returnStyle.Line.DashStyle = - DashStyle.DashDotDot; - returnStyle.Line.Width = 1; - returnStyle.MaxVisible = _roadsExtents.Width * 0.025d; - break; - default: - returnStyle = null; - break; - } - return returnStyle; - }; - layRoads.Theme = themeRoads; - layRoads.SRID = 31466; - - VectorLayer layRail = new VectorLayer("Railways"); - layRail.DataSource = new ShapeFile(string.Format("{0}/railways.shp", PathOsm)) { Encoding = encoding }; - layRail.Style.Line.Brush = Brushes.White; - layRail.Style.Line.DashPattern = new float[] { 4f, 4f };//;System.Drawing.Drawing2D.DashStyle.Dash; - layRail.Style.Line.Width = 4; - layRail.Style.EnableOutline = true; - layRail.Style.Outline.Brush = Brushes.Black; - layRail.Style.Outline.Width = 6; - - VectorLayer layWaterways = new VectorLayer("Waterways"); - layWaterways.Style = transparentStyle; - layWaterways.DataSource = new ShapeFile(string.Format("{0}/waterways.shp", PathOsm)) { Encoding = encoding }; - layRoads.Style = transparentStyle; - ThemeViaDelegate themeWater = new ThemeViaDelegate(transparentStyle, "type"); - themeWater.GetStyleFunction = delegate(FeatureDataRow row) - { - VectorStyle returnStyle = new VectorStyle(); - returnStyle.Line.Brush = Brushes.Aqua; - returnStyle.EnableOutline = true; - Int32 lineWidth = 1; - switch ((String)row["type"]) - { - case "canal": - case "derelict_canal": - lineWidth = 2; - break; - case "drain": - returnStyle.EnableOutline = false; - break; - case "stream": - lineWidth = 2; - break; - default: - //returnStyle = null; - break; - } - returnStyle.Line.Width = lineWidth; - returnStyle.Outline.Brush = Brushes.DarkBlue; - returnStyle.Outline.Width = lineWidth + 1; - return returnStyle; - }; - layWaterways.Theme = themeWater; - layWaterways.SRID = 31466; - - VectorLayer layPoints = new VectorLayer("Points"); - layPoints.DataSource = new ShapeFile(string.Format("{0}/points.shp", PathOsm)) { Encoding = encoding }; - layPoints.Style = transparentStyle2; - ThemeViaDelegate themePoints = new ThemeViaDelegate(transparentStyle2, "type"); - themePoints.GetStyleFunction = delegate(FeatureDataRow row) - { - VectorStyle returnStyle = new VectorStyle(); - switch ((String)row["type"]) - { - case "bank": - returnStyle.Symbol = new Bitmap("Images/Bank.gif"); - break; - case "hospital": - returnStyle.Symbol = new Bitmap("Images/Medical-Facility.gif"); - break; - case "hotel": - returnStyle.Symbol = new Bitmap("Images/Hotel.gif"); - break; - case "restaurant": - case "fast-food": - returnStyle.Symbol = new Bitmap("Images/Restaurant.gif"); - break; - case "parking": - returnStyle.Symbol = new Bitmap("Images/Car.gif"); - break; - default: - Bitmap tmp = new Bitmap(1, 1); - tmp.SetPixel(0, 0, Color.Transparent); - returnStyle.Symbol = tmp; - break; - } - return returnStyle; - }; - layPoints.Theme = themePoints; - layWaterways.SRID = 31466; - - var layLabel = new LabelLayer("Road Labels"); - layLabel.DataSource = layRoads.DataSource; - layLabel.LabelColumn = "Name"; - layLabel.Theme = new SharpMap.Rendering.Thematics.FontSizeTheme(layLabel, map) - { - MinFontSize = 4, - FontSizeScale = 1 - }; - var layLabelN = new LabelLayer("Natural Labels"); - layLabelN.DataSource = layNatural.DataSource; - layLabelN.LabelColumn = "type"; - layLabelN.Theme = new FontSizeTheme(layLabelN, map) - { - MinFontSize = 4, - FontSizeScale = 5 - }; - - //Add layers to Map - map.Layers.Add(layNatural); - map.Layers.Add(layWaterways); - map.Layers.Add(layRail); - map.Layers.Add(layRoads); - map.Layers.Add(layPoints); - map.Layers.Add(layLabel); - map.Layers.Add(layLabelN); - - ShapeProvider sp = new ShapeProvider(string.Format("{0}/obepath.shp", PathOsm)) { Encoding = encoding }; - VectorLayer vl = new VectorLayer("obepath", sp); - vl.SRID = 31466; - var bmp = new Bitmap("Images/Car.gif"); - bmp.MakeTransparent(bmp.GetPixel(0, 0)); - vl.Style.Symbol = bmp; - - map.VariableLayers.Interval = 500; - map.VariableLayers.Add(vl); - - //Restrict zoom - map.MaximumZoom = layRoads.Envelope.Width * 0.75d; - map.Zoom = layRoads.Envelope.Width * 0.2d; ; - map.Center = layRoads.Envelope.Centre; - - var disclaimer = new Disclaimer - { - Font = new Font(FontFamily.GenericSansSerif, 7f, FontStyle.Italic), - Text = "Geodata from OpenStreetMap (CC-by-SA)\nTransformed to Shapefile by geofabrik.de", - Anchor = MapDecorationAnchor.CenterBottom - }; - map.Decorations.Add(disclaimer); - transparentStyle2.MaxVisible = map.MaximumZoom * 0.3; - - Matrix mat = new Matrix(); - mat.RotateAt(angle, map.WorldToImage(map.Center)); - map.MapTransform = mat; - - return map; - } - - private class ShapeProvider : SharpMap.Data.Providers.ShapeFile - { - private System.Timers.Timer _timer = new Timer(500); - private int _id; - private int _modValue; - public ShapeProvider(string file) - :this(file, true) - { - } - - public ShapeProvider(string file, bool fbi) - :base(file, fbi) - { - FilterDelegate = Filter; - Open(); - _modValue = GetFeatureCount(); - _timer.Elapsed += new ElapsedEventHandler(TimerElapsed); - _timer.Start(); - - } - - void TimerElapsed(object sender, ElapsedEventArgs e) - { - _id++; - if (_id == _modValue) _id = 0; - } - - bool Filter(FeatureDataRow fdr) - { - return Convert.ToInt32(fdr[0]) == _id; - } - - } - } - - -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Timers; +using SharpMap; +using SharpMap.Data; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Thematics; +using SharpMap.Styles; + +namespace WinFormSamples.Samples +{ + public static partial class ShapefileSample + { + //Disclaimer + //The used GeoData is from www.openstreetmap.org licenced CC-by-SA + //Transformed to shapefile by Geofabrik (http://www.geofabrik.de) + public const string PathOsm = "GeoData/OSM"; + + + private static GeoAPI.Geometries.Envelope _roadsExtents; + + //Could have used SharpMap.Rendering.Thematics.CustomTheme, + //but that one does not perserve styles for fast retrieval. + //Maybe a category theme would be a good idea... + private delegate IStyle GetStyleHandler(FeatureDataRow row); + class ThemeViaDelegate : ITheme + { + public GetStyleHandler GetStyleFunction; + private readonly IStyle _default; + private readonly String _columnName; + private readonly IDictionary _stylePreserver; + + public ThemeViaDelegate(IStyle defaultStyle, String columnName) + { + _default = defaultStyle; + _stylePreserver = new Dictionary(); + _columnName = columnName; + } + + + #region Implementation of ITheme + + public IStyle GetStyle(FeatureDataRow attribute) + { + IStyle returnStyle; + String value = Convert.ToString(attribute[_columnName]); + if (!_stylePreserver.TryGetValue(value, out returnStyle)) + { + if (GetStyleFunction != null) + { + returnStyle = GetStyleFunction(attribute); + if (returnStyle == null) returnStyle = _default; + _stylePreserver.Add(value, returnStyle); + } + else + returnStyle = _default; + } + //returnStyle.MinVisible = _default.MinVisible; + //returnStyle.MaxVisible = _default.MaxVisible; + return returnStyle; + } + + #endregion + } + + + private static Map InitializeMapOsm(float angle) + { + //Transparent style + VectorStyle transparentStyle = new VectorStyle(); + transparentStyle.Fill = Brushes.Transparent; + transparentStyle.EnableOutline = true; //otherwise all the fancy theming stuff won't work! + transparentStyle.Line.Brush = Brushes.Transparent; + transparentStyle.Outline.Brush = Brushes.Transparent; + transparentStyle.Symbol = null; + + VectorStyle transparentStyle2 = new VectorStyle(); + transparentStyle2.Fill = Brushes.Transparent; + transparentStyle2.EnableOutline = true; //otherwise all the fancy theming stuff won't work! + transparentStyle2.Line.Brush = Brushes.Transparent; + transparentStyle2.Outline.Brush = Brushes.Transparent; + transparentStyle2.Symbol = null; + + //Initialize a new map + Map map = new Map(); + map.BackColor = Color.Cornsilk; + map.SRID = 31466; + + var encoding = System.Text.Encoding.UTF8; + + //Set up the countries layer + VectorLayer layNatural = new VectorLayer("Natural"); + //Set the datasource to a shapefile in the App_data folder + layNatural.DataSource = new ShapeFile(string.Format("{0}/natural.shp", PathOsm), true) { Encoding = encoding }; + //Set default style to draw nothing + layNatural.Style = transparentStyle; + //Set theme + ThemeViaDelegate theme = new ThemeViaDelegate(layNatural.Style, "type"); + theme.GetStyleFunction = delegate(FeatureDataRow row) + { + string caseVal = (String)row["type"]; + caseVal = caseVal.ToLowerInvariant(); + VectorStyle returnStyle = new VectorStyle(); + + switch (caseVal) + { + case "forest": + returnStyle.Fill = Brushes.ForestGreen; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.DarkGreen; + break; + case "water": + returnStyle.Fill = Brushes.Aqua; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.DarkBlue; + break; + case "riverbank": + returnStyle.Fill = Brushes.Peru; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.OrangeRed; + break; + case "park": + returnStyle.Fill = Brushes.PaleGreen; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.DarkGreen; + break; + default: + returnStyle = null; + break; + } + return returnStyle; + }; + layNatural.Theme = theme; + layNatural.SRID = 31466; + + VectorLayer layRoads = new VectorLayer("Roads"); + layRoads.DataSource = new ShapeFile(string.Format("{0}/roads.shp", PathOsm)) { Encoding = encoding }; + layRoads.DataSource.Open(); + _roadsExtents = layRoads.DataSource.GetExtents(); + //layRoads.DataSource.Close(); + layRoads.Style = transparentStyle; + ThemeViaDelegate themeRoads = new ThemeViaDelegate(transparentStyle, "type"); + themeRoads.GetStyleFunction = delegate(FeatureDataRow row) + { + VectorStyle returnStyle = new VectorStyle(); + + switch ((String)row["type"]) + { + case "rail": + returnStyle.Fill = Brushes.White; + returnStyle.Line.DashPattern = new float[] { 4f, 4f };//;System.Drawing.Drawing2D.DashStyle.Dash; + returnStyle.Line.Width = 4; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.Black; + returnStyle.Outline.Width = 6; + break; + case "canal": + returnStyle.Fill = Brushes.Aqua; + returnStyle.Outline.Brush = Brushes.DarkBlue; + returnStyle.Outline.Width = 5; + break; + case "cycleway": + case "footway": + case "pedestrian": + returnStyle.Line.Brush = Brushes.DarkGray; + returnStyle.Line.DashStyle = + DashStyle.Dot; + returnStyle.Line.Width = 1; + returnStyle.MaxVisible = _roadsExtents.Width * 0.05d; + break; + case "living_street": + case "residential": + returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; + returnStyle.Line.Width = 2; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.DarkGray; + returnStyle.Outline.Width = 4; + returnStyle.MaxVisible = _roadsExtents.Width * 0.15d; + break; + case "primary": + returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; + returnStyle.Line.Width = 7; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.Black; + returnStyle.Outline.Width = 11; + break; + case "secondary": + returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; + returnStyle.Line.Width = 6; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.Black; + returnStyle.MaxVisible = _roadsExtents.Width * 0.3d; + returnStyle.Outline.Width = 10; + break; + case "tertiary": + returnStyle.Line.Brush = Brushes.LightGoldenrodYellow; + returnStyle.Line.Width = 5; + returnStyle.EnableOutline = true; + returnStyle.Outline.Brush = Brushes.Black; + returnStyle.MaxVisible = _roadsExtents.Width * 0.6d; + returnStyle.Outline.Width = 9; + break; + case "path": + case "track": + case "unclassified": + returnStyle.Line.Brush = Brushes.DarkGray; + returnStyle.Line.DashStyle = + DashStyle.DashDotDot; + returnStyle.Line.Width = 1; + returnStyle.MaxVisible = _roadsExtents.Width * 0.025d; + break; + default: + returnStyle = null; + break; + } + return returnStyle; + }; + layRoads.Theme = themeRoads; + layRoads.SRID = 31466; + + VectorLayer layRail = new VectorLayer("Railways"); + layRail.DataSource = new ShapeFile(string.Format("{0}/railways.shp", PathOsm)) { Encoding = encoding }; + layRail.Style.Line.Brush = Brushes.White; + layRail.Style.Line.DashPattern = new float[] { 4f, 4f };//;System.Drawing.Drawing2D.DashStyle.Dash; + layRail.Style.Line.Width = 4; + layRail.Style.EnableOutline = true; + layRail.Style.Outline.Brush = Brushes.Black; + layRail.Style.Outline.Width = 6; + + VectorLayer layWaterways = new VectorLayer("Waterways"); + layWaterways.Style = transparentStyle; + layWaterways.DataSource = new ShapeFile(string.Format("{0}/waterways.shp", PathOsm)) { Encoding = encoding }; + layRoads.Style = transparentStyle; + ThemeViaDelegate themeWater = new ThemeViaDelegate(transparentStyle, "type"); + themeWater.GetStyleFunction = delegate(FeatureDataRow row) + { + VectorStyle returnStyle = new VectorStyle(); + returnStyle.Line.Brush = Brushes.Aqua; + returnStyle.EnableOutline = true; + Int32 lineWidth = 1; + switch ((String)row["type"]) + { + case "canal": + case "derelict_canal": + lineWidth = 2; + break; + case "drain": + returnStyle.EnableOutline = false; + break; + case "stream": + lineWidth = 2; + break; + default: + //returnStyle = null; + break; + } + returnStyle.Line.Width = lineWidth; + returnStyle.Outline.Brush = Brushes.DarkBlue; + returnStyle.Outline.Width = lineWidth + 1; + return returnStyle; + }; + layWaterways.Theme = themeWater; + layWaterways.SRID = 31466; + + VectorLayer layPoints = new VectorLayer("Points"); + layPoints.DataSource = new ShapeFile(string.Format("{0}/points.shp", PathOsm)) { Encoding = encoding }; + layPoints.Style = transparentStyle2; + ThemeViaDelegate themePoints = new ThemeViaDelegate(transparentStyle2, "type"); + themePoints.GetStyleFunction = delegate(FeatureDataRow row) + { + VectorStyle returnStyle = new VectorStyle(); + switch ((String)row["type"]) + { + case "bank": + returnStyle.Symbol = new Bitmap("Images/Bank.gif"); + break; + case "hospital": + returnStyle.Symbol = new Bitmap("Images/Medical-Facility.gif"); + break; + case "hotel": + returnStyle.Symbol = new Bitmap("Images/Hotel.gif"); + break; + case "restaurant": + case "fast-food": + returnStyle.Symbol = new Bitmap("Images/Restaurant.gif"); + break; + case "parking": + returnStyle.Symbol = new Bitmap("Images/Car.gif"); + break; + default: + Bitmap tmp = new Bitmap(1, 1); + tmp.SetPixel(0, 0, Color.Transparent); + returnStyle.Symbol = tmp; + break; + } + return returnStyle; + }; + layPoints.Theme = themePoints; + layWaterways.SRID = 31466; + + var layLabel = new LabelLayer("Road Labels"); + layLabel.DataSource = layRoads.DataSource; + layLabel.LabelColumn = "Name"; + layLabel.Theme = new SharpMap.Rendering.Thematics.FontSizeTheme(layLabel, map) + { + MinFontSize = 4, + FontSizeScale = 1 + }; + var layLabelN = new LabelLayer("Natural Labels"); + layLabelN.DataSource = layNatural.DataSource; + layLabelN.LabelColumn = "type"; + layLabelN.Theme = new FontSizeTheme(layLabelN, map) + { + MinFontSize = 4, + FontSizeScale = 5 + }; + + //Add layers to Map + map.Layers.Add(layNatural); + map.Layers.Add(layWaterways); + map.Layers.Add(layRail); + map.Layers.Add(layRoads); + map.Layers.Add(layPoints); + map.Layers.Add(layLabel); + map.Layers.Add(layLabelN); + + ShapeProvider sp = new ShapeProvider(string.Format("{0}/obepath.shp", PathOsm)) { Encoding = encoding }; + VectorLayer vl = new VectorLayer("obepath", sp); + vl.SRID = 31466; + var bmp = new Bitmap("Images/Car.gif"); + bmp.MakeTransparent(bmp.GetPixel(0, 0)); + vl.Style.Symbol = bmp; + + map.VariableLayers.Interval = 500; + map.VariableLayers.Add(vl); + + //Restrict zoom + map.MaximumZoom = layRoads.Envelope.Width * 0.75d; + map.Zoom = layRoads.Envelope.Width * 0.2d; ; + map.Center = layRoads.Envelope.Centre; + + var disclaimer = new Disclaimer + { + Font = new Font(FontFamily.GenericSansSerif, 7f, FontStyle.Italic), + Text = "Geodata from OpenStreetMap (CC-by-SA)\nTransformed to Shapefile by geofabrik.de", + Anchor = MapDecorationAnchor.CenterBottom + }; + map.Decorations.Add(disclaimer); + transparentStyle2.MaxVisible = map.MaximumZoom * 0.3; + + Matrix mat = new Matrix(); + mat.RotateAt(angle, map.WorldToImage(map.Center)); + map.MapTransform = mat; + + return map; + } + + private class ShapeProvider : SharpMap.Data.Providers.ShapeFile + { + private System.Timers.Timer _timer = new Timer(500); + private int _id; + private int _modValue; + public ShapeProvider(string file) + :this(file, true) + { + } + + public ShapeProvider(string file, bool fbi) + :base(file, fbi) + { + FilterDelegate = Filter; + Open(); + _modValue = GetFeatureCount(); + _timer.Elapsed += new ElapsedEventHandler(TimerElapsed); + _timer.Start(); + + } + + void TimerElapsed(object sender, ElapsedEventArgs e) + { + _id++; + if (_id == _modValue) _id = 0; + } + + bool Filter(FeatureDataRow fdr) + { + return Convert.ToInt32(fdr[0]) == _id; + } + + } + } + + +} From 770ddfb30bc569a6ea2a9f6830859d7332e27b5f Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 20 Jul 2019 21:29:46 +0700 Subject: [PATCH 100/186] Add PcsGraticuleMode for WebMercator graticule and add Unit Test --- Examples/WinFormSamples/Form2.cs | 7 +- SharpMap/Rendering/Decoration/Graticule.cs | 524 +++++++++++++----- .../Rendering/Decoration/GraticuleStyle.cs | 23 +- UnitTests/UnitTestsFixture.cs | 4 + 4 files changed, 422 insertions(+), 136 deletions(-) diff --git a/Examples/WinFormSamples/Form2.cs b/Examples/WinFormSamples/Form2.cs index 3564a236..76f5e0b9 100644 --- a/Examples/WinFormSamples/Form2.cs +++ b/Examples/WinFormSamples/Form2.cs @@ -64,7 +64,12 @@ private void Form2_Load(object sender, EventArgs e) // Graticule this.mapBox1.Map.Decorations.Add(new Graticule() { - Enabled = chkGraticule.Checked + Enabled = chkGraticule.Checked, + PcsGraticuleMode = GraticuleStyle.PcsGraticuleMode.WebMercatorScaleLines, + PcsGraticuleStyle = + { + NumSubdivisions = 2 + } }); this.mapBox1.Map.ZoomToBox(geom); diff --git a/SharpMap/Rendering/Decoration/Graticule.cs b/SharpMap/Rendering/Decoration/Graticule.cs index beb05966..79112b7a 100644 --- a/SharpMap/Rendering/Decoration/Graticule.cs +++ b/SharpMap/Rendering/Decoration/Graticule.cs @@ -12,6 +12,7 @@ using NetTopologySuite.Geometries.Utilities; using NetTopologySuite.Utilities; using SharpMap.Styles; +using Matrix = System.Drawing.Drawing2D.Matrix; using Point = NetTopologySuite.Geometries.Point; namespace SharpMap.Rendering.Decoration @@ -25,6 +26,8 @@ namespace SharpMap.Rendering.Decoration /// The Projected Coordinate System graticule is managed via , /// and the Geographic Coordinate System graticule via /// + /// Web Mercator Projected Coordinate System graticule can be rendered as a standard + /// rectilinear graticule, or as meridian scale distortion lines via /// public class Graticule : MapDecoration { @@ -34,7 +37,7 @@ public class Graticule : MapDecoration private const double GeographicTolerance = 1e-9; // 1dp more than typical precision private const double ProjectedTolerance = 1e-4; // 1dp more than typical precision private const double SecondOfArcDecimalPlaces = 1e-4; // approx. 1mm at the equator - + private const int PcsPowerRangeMin = -5; private const int PcsPowerRangeMax = 10; private readonly double[] _pcsPreferredMultiples = {5, 2.5, 2, 1}; // MUST be in descending order @@ -46,17 +49,17 @@ private readonly double[] _gcsPreferredMultiples = {90, 60, 30, 20, 15, 10, 5, 2.5, 2, 1}; // MUST be in descending order private readonly Polygon _webMercatorClipPolygon = new Polygon( - new LinearRing(new [] - { - GeoSpatialMath.WebMercatorEnv.BottomLeft(), - GeoSpatialMath.WebMercatorEnv.TopLeft(), - GeoSpatialMath.WebMercatorEnv.TopRight(), - GeoSpatialMath.WebMercatorEnv.BottomRight(), - GeoSpatialMath.WebMercatorEnv.BottomLeft(), - })); + new LinearRing(new[] + { + GeoSpatialMath.WebMercatorEnv.BottomLeft(), + GeoSpatialMath.WebMercatorEnv.TopLeft(), + GeoSpatialMath.WebMercatorEnv.TopRight(), + GeoSpatialMath.WebMercatorEnv.BottomRight(), + GeoSpatialMath.WebMercatorEnv.BottomLeft(), + })); private int _srid; - private Envelope _previousExtents; + private Envelope _oldViewExtents; private Polygon _viewClipPolygon; private ICoordinateSystem _coordinateSystem; private string _pcsUnitSuffix; @@ -68,8 +71,9 @@ private readonly double[] private IMathTransform _project; private Envelope _pcsConstrExtents; private Envelope _gcsConstrExtents; - private int _pcsNumSubdivisions; - private int _gcsNumSubdivisions; + private int _oldPcsNumSubdivisions; + private int _oldGcsNumSubdivisions; + private GraticuleStyle.PcsGraticuleMode _oldPcsGraticuleMode; /// /// Helper class for managing graticule geometry @@ -104,6 +108,13 @@ private enum LabelEnds /// public GraticuleStyle PcsGraticuleStyle { get; set; } + /// + /// Defines how Web Mercator Projected Graticule will be rendered. + /// Either as a standard rectilinear graticule, or as meridian scale distortion lines + /// + public GraticuleStyle.PcsGraticuleMode PcsGraticuleMode { get; set; } = + GraticuleStyle.PcsGraticuleMode.Standard; + /// /// Graticule style definition for the Geographic Coordinate System /// @@ -124,9 +135,8 @@ public Graticule() SecondaryPen = {DashStyle = DashStyle.Dash} }; - - GcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Subtle, - GraticuleStyle.GraticuleLineStyle.HollowTick, false, + GcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Subtle, + GraticuleStyle.GraticuleLineStyle.HollowTick, false, GraticuleStyle.GraticuleDecorationBorders.RightTop); } @@ -144,36 +154,44 @@ protected override void OnRender(Graphics g, MapViewport map) if (_coordinateSystem == null) return; - if (_previousExtents is null || !_previousExtents.Equals(map.Envelope) || - PcsGraticuleStyle.NumSubdivisions != _pcsNumSubdivisions || - GcsGraticuleStyle.NumSubdivisions != _gcsNumSubdivisions) - CalculateMetrics(g, map); + var webMercatorScaleLinesActive = _srid == GeoSpatialMath.WebMercatorSrid && + PcsGraticuleMode == GraticuleStyle.PcsGraticuleMode + .WebMercatorScaleLines; + + if (_oldViewExtents is null || !_oldViewExtents.Equals(map.Envelope) || + PcsGraticuleStyle.NumSubdivisions != _oldPcsNumSubdivisions || + GcsGraticuleStyle.NumSubdivisions != _oldGcsNumSubdivisions || + PcsGraticuleMode != _oldPcsGraticuleMode) + CalculateMetrics(g, map, webMercatorScaleLinesActive); if (_coordinateSystem is IProjectedCoordinateSystem) { - OnRenderInternal(g, map, PcsGraticuleStyle, _pcsConstrExtents, _pcsDomain); - OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain); + OnRenderInternal(g, map, PcsGraticuleStyle, _pcsConstrExtents, _pcsDomain, + webMercatorScaleLinesActive); + OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain, false); } else - OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain); + OnRenderInternal(g, map, GcsGraticuleStyle, _gcsConstrExtents, _gcsDomain, false); } catch (NullReferenceException ex) { - _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); + _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); _logger.Error(ex); } } /// - /// Fully render a graticule according to the style + /// Fully render a graticule according to the given style + /// (ie Projected graticule is rendered separately to Geographic graticule) /// /// /// /// /// /// + /// Refer to <see cref="PcsGraticuleMode"/> private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, - Envelope constrExtents, Envelope crsDomain) + Envelope constrExtents, Envelope crsDomain, bool webMercatorScaleLinesActive) { var visibleRef = style.VisibilityUnits == VisibilityUnits.Scale ? _mapScale : map.Zoom; @@ -188,8 +206,8 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, var graticuleDefs = new List(); // calculate geometry for Meridians and Parallels in world coordinate system - graticuleDefs.AddRange(CalculateParallels(style, constrExtents, crsDomain)); - graticuleDefs.AddRange(CalculateMeridians(style, constrExtents, crsDomain)); + graticuleDefs.AddRange(CalculateParallels(style, constrExtents, crsDomain, webMercatorScaleLinesActive)); + graticuleDefs.AddRange(CalculateMeridians(style, constrExtents, crsDomain, webMercatorScaleLinesActive)); // project / simplify / clip / transform to image space foreach (var def in graticuleDefs) @@ -201,44 +219,44 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, (LineString) GeometryTransform.TransformLineString(def.WcsGraticule, _project, targetFactory); def.WcsTickMarks = new MultiPoint(TransformPreserveZ(_project, def.WcsTickMarks.Coordinates)); } - + + if (def.WcsGraticule == null || def.WcsGraticule.IsEmpty) continue; + // Simplify (AFTER doing any projection) - var graticuleLine = def.WcsGraticule; - if (graticuleLine == null) continue; - if (graticuleLine.NumPoints > 2) + if (def.WcsGraticule.NumPoints > 2) { int same; if (def.IsParallel) { - var initialY = graticuleLine.Coordinates[0].Y; - same = graticuleLine.Coordinates.Count(c => Math.Abs(c.Y - initialY) < tolerance); + var initialY = def.WcsGraticule .Coordinates[0].Y; + same = def.WcsGraticule.Coordinates.Count(c => Math.Abs(c.Y - initialY) < tolerance); } else { - var initialX = graticuleLine.Coordinates[0].X; - same = graticuleLine.Coordinates.Count(c => Math.Abs(c.X - initialX) < tolerance); + var initialX = def.WcsGraticule .Coordinates[0].X; + same = def.WcsGraticule.Coordinates.Count(c => Math.Abs(c.X - initialX) < tolerance); } - if (graticuleLine.Coordinates.Length == same) + if (def.WcsGraticule.Coordinates.Length == same) { // simplify to single line segment - graticuleLine = new LineString(new[] + def.WcsGraticule = new LineString(new[] { - graticuleLine.Coordinates[0], - graticuleLine.Coordinates[graticuleLine.NumPoints - 1] + def.WcsGraticule .Coordinates.First(), + def.WcsGraticule .Coordinates.Last() }); } } // Clip + Transform to image. See CalculateMetrics for special handling of _viewClipPolygon and WebMercator - def.ImageGraticule = map.WorldToImage(_viewClipPolygon.Intersection(graticuleLine).Coordinates, true); + def.ImageGraticule = map.WorldToImage(_viewClipPolygon.Intersection(def.WcsGraticule).Coordinates, true); var clippedTicks = _viewClipPolygon.Intersection(def.WcsTickMarks).Coordinates; // transfer Z ordinate to bool[] to indicate Primary or Secondary pen when rendering def.ImageTickMarks = map.WorldToImage(clippedTicks, true); def.ImageTickStyle = new bool[clippedTicks.Length]; for (var j = 0; j < clippedTicks.Length; j++) - def.ImageTickStyle[j] = Convert.ToInt32 (clippedTicks[j].Z) == 1; + def.ImageTickStyle[j] = Convert.ToInt32(clippedTicks[j].Z) == 1; } // Render @@ -248,6 +266,8 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, ? GcsGraticuleStyle : PcsGraticuleStyle; + if (webMercatorScaleLinesActive) return false; + if (def.IsPrimary) return s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.SolidTick || s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.HollowTick; @@ -269,7 +289,10 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, RenderGraticuleLines(g, linesOnly); } - RenderLabels(g, graticuleDefs, map.MapTransformRotation); + if (webMercatorScaleLinesActive) + RenderScaleLineLabels(g, graticuleDefs, map); + else + RenderLabels(g, graticuleDefs, map.MapTransformRotation); } /// @@ -279,8 +302,10 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, /// /// /// + /// Refer to <see cref="PcsGraticuleMode"/> /// List of graticule geometries for rendering - private List CalculateParallels(GraticuleStyle style, Envelope constrExtents, Envelope crsDomain) + private List CalculateParallels(GraticuleStyle style, Envelope constrExtents, + Envelope crsDomain, bool webMercatorScaleLinesActive) { var parallels = new List(); var coordList = new List(); @@ -290,12 +315,19 @@ private List CalculateParallels(GraticuleStyle style, Envelope con // Parallels var iterateX = 1 + Convert.ToInt32((constrExtents.MaxX - constrExtents.MinX) / style.Subdivision); var iterateY = 1 + Convert.ToInt32((constrExtents.MaxY - constrExtents.MinY) / style.Subdivision); - + for (var i = 0; i < iterateY; i++) { - //var thisY = constrExtents.MinY; thisY <= constrExtents.MaxY; thisY += style.Subdivision - var thisY = constrExtents.MinY + i*style.Subdivision; - var isPrimaryParallel = IsPrimaryInterval( thisY, style.Division, tolerance); + var thisY = constrExtents.MinY + i * style.Subdivision; + + if (webMercatorScaleLinesActive) + // skip if NOT equator + if (!(Math.Abs(thisY) < tolerance || + // or NOT "poles" (85 deg N/S) + crsDomain != null && Math.Abs(Math.Abs(thisY) - crsDomain.MaxY) < tolerance)) + continue; + + var isPrimaryParallel = IsPrimaryInterval(thisY, style.Division, tolerance); if (!isPrimaryParallel && style.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.None) continue; @@ -307,10 +339,8 @@ private List CalculateParallels(GraticuleStyle style, Envelope con continue; coordList.Clear(); - for (var j= 0; j < iterateX; j++) + for (var j = 0; j < iterateX; j++) { - // var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += style.Subdivision - //var x = thisX; var thisX = constrExtents.MinX + j * style.Subdivision; var x = thisX; @@ -333,7 +363,7 @@ private List CalculateParallels(GraticuleStyle style, Envelope con } if (coordList.Count < 2) continue; - + parallels.Add(new GraticuleDef() { IsGeographicGraticule = isGeographicGraticule, @@ -355,8 +385,10 @@ private List CalculateParallels(GraticuleStyle style, Envelope con /// /// /// + /// Refer to <see cref="PcsGraticuleMode"/> /// List of graticule geometries for rendering - private List CalculateMeridians(GraticuleStyle style, Envelope constrExtents, Envelope crsDomain) + private List CalculateMeridians(GraticuleStyle style, Envelope constrExtents, + Envelope crsDomain, bool webMercatorScaleLinesActive) { var meridians = new List(); var coordList = new List(); @@ -365,12 +397,19 @@ private List CalculateMeridians(GraticuleStyle style, Envelope con var tolerance = isGeographicGraticule ? GeographicTolerance : ProjectedTolerance; // Meridians - var iterateX = 1 + Convert.ToInt32((constrExtents.MaxX - constrExtents.MinX) / style.Subdivision) ; - var iterateY = 1+ Convert.ToInt32((constrExtents.MaxY - constrExtents.MinY) / style.Subdivision) ; + var iterateX = 1 + Convert.ToInt32((constrExtents.MaxX - constrExtents.MinX) / style.Subdivision); + var iterateY = 1 + Convert.ToInt32((constrExtents.MaxY - constrExtents.MinY) / style.Subdivision); - for (var i = 0 ; i < iterateX; i++) + var factor = 1.0; + if (webMercatorScaleLinesActive) + { + // increase resolution for Web Mercator scales lines for nice smooth line when zoomed out + factor = 0.5; + iterateY *= 2; + } + + for (var i = 0; i < iterateX; i++) { - //var thisX = constrExtents.MinX; thisX <= constrExtents.MaxX; thisX += style.Subdivision var thisX = constrExtents.MinX + i * style.Subdivision; var isPrimaryMeridian = IsPrimaryInterval(thisX, style.Division, tolerance); @@ -385,37 +424,40 @@ private List CalculateMeridians(GraticuleStyle style, Envelope con coordList.Clear(); tickList.Clear(); - for (var j = 0; j < iterateY; j++) { - //var thisY = constrExtents.MinY; thisY <= constrExtents.MaxY; thisY += style.Subdivision - var thisY = constrExtents.MinY + j * style.Subdivision; + var thisY = constrExtents.MinY + j * style.Subdivision * factor; var y = thisY; // Trim meridian north-south extent to CRS domain if (crsDomain != null && !crsDomain.IsNull) // test for difference of 1 full increment or more if (y < crsDomain.MinY - tolerance) - if (y < crsDomain.MinY - style.Subdivision + tolerance) //(y + style.Subdivision <= crsDomain.MinY) + if (y < crsDomain.MinY - style.Subdivision + tolerance + ) //(y + style.Subdivision <= crsDomain.MinY) continue; else y = crsDomain.MinY; else if (y > crsDomain.MaxY + tolerance) - if (y > crsDomain.MaxY + style.Subdivision - tolerance)//(y - style.Subdivision >= crsDomain.MaxY) + if (y > crsDomain.MaxY + style.Subdivision - tolerance + ) //(y - style.Subdivision >= crsDomain.MaxY) continue; else y = crsDomain.MaxY; - coordList.Add(_srid == GeoSpatialMath.WebMercatorSrid + // special handling for Web Mercator scale lines + coordList.Add(webMercatorScaleLinesActive ? new Coordinate(CalcScaleCorrectedX(thisX, y), y) : new Coordinate(thisX, y)); + if (webMercatorScaleLinesActive) continue; + // if regular interval has been adjusted to fit CRS bounds if (Math.Abs(thisY - y) > tolerance) continue; // ticks - var isPrimaryParallel = IsPrimaryInterval(thisY,style.Division, tolerance); + var isPrimaryParallel = IsPrimaryInterval(thisY, style.Division, tolerance); if (!style.IsTickRequired(isPrimaryMeridian, isPrimaryParallel)) continue; @@ -423,8 +465,10 @@ private List CalculateMeridians(GraticuleStyle style, Envelope con if (crsDomain != null && !crsDomain.IsNull) // skip this tick if coincident with CRS domain envelope - if (Math.Abs(thisX - crsDomain.MinX) < tolerance || Math.Abs(thisX - crsDomain.MaxX) < tolerance || - Math.Abs(thisY - crsDomain.MinY) < tolerance || Math.Abs(thisY - crsDomain.MaxY) < tolerance) + if (Math.Abs(thisX - crsDomain.MinX) < tolerance || + Math.Abs(thisX - crsDomain.MaxX) < tolerance || + Math.Abs(thisY - crsDomain.MinY) < tolerance || + Math.Abs(thisY - crsDomain.MaxY) < tolerance) continue; // use Z ordinate to indicate intersection of primary parallel and primary meridian @@ -435,7 +479,7 @@ private List CalculateMeridians(GraticuleStyle style, Envelope con } if (coordList.Count < 2) continue; - + meridians.Add(new GraticuleDef() { IsGeographicGraticule = isGeographicGraticule, @@ -481,7 +525,7 @@ private bool ExceedsResolution(GraticuleStyle style, bool isPrimaryIncrement) else return style.Subdivision < OneSecond; } - + // projected if (isPrimaryIncrement) return style.Division < 1; @@ -489,6 +533,20 @@ private bool ExceedsResolution(GraticuleStyle style, bool isPrimaryIncrement) return style.Subdivision < 1; } + /// + /// Return a formatted distance label + /// + /// + /// + private string GetFormattedDistanceLabel(double value) + { + if (value > 1000 && _pcsUnitSuffix == "m") + return GetFormattedLabel(false, value / 1000, + AxisOrientationEnum.Other).Replace("m", "km"); + + return GetFormattedLabel(false, value, AxisOrientationEnum.Other); + } + /// /// Format a value with appropriate units and axis suffix /// @@ -560,16 +618,16 @@ private string GetFormattedLabel(bool isGeographicCoordinateSystem, double value private static int GetDecimalPlaces(double value, int maxPrecision) { if (maxPrecision <= 0) return 0; - + // eg 0.### var fmt = "0." + new string('#', maxPrecision); - // implicit rounding away from zero??? + // -101.8, 0 >> -102 var strValue = value.ToString(fmt); - - return strValue.Contains('.') ? strValue.Reverse().TakeWhile(c => c !='.').Count() : 0; + + return strValue.Contains('.') ? strValue.Reverse().TakeWhile(c => c != '.').Count() : 0; } - + /// /// Transform coordinates between coordinate systems, preserving Z ordinate. /// @@ -616,7 +674,7 @@ private void RenderGraticuleTicks(Graphics g, IEnumerable graticul { var oldTransform = g.Transform; - using (var matrix = new System.Drawing.Drawing2D.Matrix()) + using (var matrix = new Matrix()) { foreach (var def in graticuleDefs) { @@ -627,7 +685,7 @@ private void RenderGraticuleTicks(Graphics g, IEnumerable graticul : PcsGraticuleStyle; var tolerance = def.IsGeographicGraticule ? GeographicTolerance : ProjectedTolerance; - + var orientOn = PointF.Empty; for (var i = 0; i < def.ImageTickMarks.Length; i++) { @@ -647,7 +705,7 @@ private void RenderGraticuleTicks(Graphics g, IEnumerable graticul else if (def.ImageGraticule.Length > 0) { orientOn = def.ImageGraticule.FirstOrDefault( - p => !(Math.Abs(p.X - tick.X) < tolerance && + p => !(Math.Abs(p.X - tick.X) < tolerance && Math.Abs(p.Y - tick.Y) < tolerance)); } @@ -732,7 +790,7 @@ private void RenderLabels(Graphics g, IEnumerable graticuleDefs, f var originalTransform = g.Transform; - using (var matrix = new System.Drawing.Drawing2D.Matrix()) + using (var matrix = new Matrix()) { foreach (var def in graticuleDefs) { @@ -865,17 +923,12 @@ private LabelEnds GetLabelEnds(GraticuleStyle style, GraticuleDef def, float map /// Graticule Style /// estimated label size from g.MeasureString /// the end of the line to be labelled - private void RenderLabel(Graphics g, System.Drawing.Drawing2D.Matrix matrix, - GraticuleDef def, GraticuleStyle style, SizeF labelSize, LabelEnds thisEnd) + private void RenderLabel(Graphics g, Matrix matrix, GraticuleDef def, GraticuleStyle style, + SizeF labelSize, LabelEnds thisEnd) { var origin = thisEnd == LabelEnds.Start ? def.ImageGraticule.First() : def.ImageGraticule.Last(); var orientOn = thisEnd == LabelEnds.Start ? def.ImageGraticule.Last() : def.ImageGraticule.First(); - if (_srid == GeoSpatialMath.WebMercatorSrid) - orientOn = thisEnd == LabelEnds.Start ? - def.ImageGraticule[1] : - def.ImageGraticule[def.ImageGraticule.Length - 2]; - // NB invert Y axis var rad = Math.Atan2(-1 * (orientOn.Y - origin.Y), orientOn.X - origin.X); if (rad < 0) rad += 2 * Math.PI; @@ -913,6 +966,194 @@ private void RenderLabel(Graphics g, System.Drawing.Drawing2D.Matrix matrix, def.IsPrimary ? style.PrimaryLabelColor : style.SecondaryLabelColor, origin); } + + /// + /// Render web mercator scale distortion meridians + /// + /// + /// + /// + private void RenderScaleLineLabels(Graphics g, List graticuleDefs, MapViewport map) + { + // drop any parallels + var filteredDefs = graticuleDefs.Where(d => d.IsParallel == false).ToList(); + if (filteredDefs.Count < 2) return; + + // the 4 sides in image space in preferred labelling sequence + var sides = new[] + { + MapDecorationAnchorFlags.Bottom, + MapDecorationAnchorFlags.Top, + MapDecorationAnchorFlags.Left, + MapDecorationAnchorFlags.Right + }; + + // real-world lines, inset from view borders by specified amount + var intersectionLines = GetIntersectionLines(g, map, sides, + PcsGraticuleStyle.PrimaryMargin + PcsGraticuleStyle.PrimaryLabelOffset.X); + + var dictIntersections = new Dictionary>(); + + for (var i = 0; i < sides.Length; i++) + { + var side = sides[i]; + + // check to see if this is one of the borders to be labelled + if (((int) side & (int) PcsGraticuleStyle.LabelBorders) == 0) continue; + + // perform intersection in world units + dictIntersections[side] = CalculateScaleLineIntersections(filteredDefs, (LineString) intersectionLines[i]); + } + + // determine label size in world units + var label = GetFormattedDistanceLabel(PcsGraticuleStyle.Subdivision); + var labelSize = g.MeasureString(label, PcsGraticuleStyle.PrimaryLabelFont); + var labelDist = labelSize.Width * map.PixelWidth; + + // insert labels at every 2nd gap + var oldTransform = g.Transform; + using (var matrix = new Matrix()) + foreach (var key in dictIntersections.Keys) + { + var intPoints = dictIntersections[key]; + if (intPoints.Count < 2) continue; + + // iterate through intersection points, labelling every 2nd gap + for (var j = 0; j < intPoints.Count - 1; j++) + { + if (j % 2 != 0) continue; + + matrix.Reset(); + var ptA = intPoints[j]; + var ptB = intPoints[j + 1]; + var dist = ptA.Distance(ptB); + if (dist < labelDist * 0.75) continue; + + var midPtWcs = new Coordinate((ptA.X + ptB.X) * 0.5, (ptA.Y + ptB.Y) * 0.5); + var midPtF = map.WorldToImage(midPtWcs, true); + + if ((key & MapDecorationAnchorFlags.Left) == MapDecorationAnchorFlags.Left || + (key & MapDecorationAnchorFlags.Right) == MapDecorationAnchorFlags.Right) + matrix.RotateAt(-90, midPtF); + + switch (key) + { + case MapDecorationAnchorFlags.Left: + case MapDecorationAnchorFlags.Top: + matrix.Translate(labelSize.Width * -0.5f, 0); + break; + case MapDecorationAnchorFlags.Right: + case MapDecorationAnchorFlags.Bottom: + matrix.Translate(labelSize.Width * -0.5f, -labelSize.Height); + break; + } + + g.Transform = matrix; + if (PcsGraticuleStyle.LabelHalo != null) + // Y-1 to centre box around glyph + g.FillRectangle(PcsGraticuleStyle.LabelHalo, midPtF.X, midPtF.Y - 1, labelSize.Width, + labelSize.Height); + + g.DrawString(label, PcsGraticuleStyle.PrimaryLabelFont, PcsGraticuleStyle.PrimaryLabelColor, + midPtF); + } + } + + g.Transform = oldTransform; + } + + /// + /// Construct lines inset from image border, then convert to world units to + /// be used for calculating intersections with graticule lines in world units + /// + /// + /// + /// + /// + /// + private MultiLineString GetIntersectionLines(Graphics g, MapViewport map, MapDecorationAnchorFlags[] sides, + int margin) + { + // Image space + var pts = new [] + { + new PointF(g.ClipBounds.Left + margin, g.ClipBounds.Bottom), // left side + new PointF(g.ClipBounds.Left + margin, g.ClipBounds.Top), + new PointF(g.ClipBounds.Left, g.ClipBounds.Top + margin), // top side + new PointF(g.ClipBounds.Right, g.ClipBounds.Top + margin), + new PointF(g.ClipBounds.Right - margin, g.ClipBounds.Top), // right side + new PointF(g.ClipBounds.Right - margin, g.ClipBounds.Bottom), + new PointF(g.ClipBounds.Left, g.ClipBounds.Bottom - margin), // bottom side + new PointF(g.ClipBounds.Right - margin, g.ClipBounds.Bottom - margin) + }; + + // to world coordinates + var coords = map.ImageToWorld(pts, true); + + // construct world lines + var lines = new ILineString[4]; + for (var i = 0; i < sides.Length; i++) + { + var side = sides[i]; + switch (side) + { + case MapDecorationAnchorFlags.Left: + lines[i] = new LineString(new[] {coords[0], coords[1]}); // left + break; + case MapDecorationAnchorFlags.Top: + lines[i] = new LineString(new[] {coords[2], coords[3]}); // top + break; + case MapDecorationAnchorFlags.Right: + lines[i] = new LineString(new[] {coords[4], coords[5]}); // right + break; + case MapDecorationAnchorFlags.Bottom: + lines[i] = new LineString(new[] {coords[6], coords[7]}); // bottom + break; + } + } + + return new MultiLineString(lines); + } + + /// + /// Calculate intersections of given line with all of the provided graticule lines + /// + /// + /// + /// Coordinate list, ordered West to East, South to North + private List CalculateScaleLineIntersections(List filteredDefs, LineString line) + { + var coords = new List(); + + foreach (var def in filteredDefs) + { + var geom = def.WcsGraticule.Intersection(line); + if (geom.IsEmpty) continue; + + // typically 0, 1, or sometimes 2 + foreach (var thisCoord in geom.Coordinates) + { + if (coords.Count == 0) + coords.Add(thisCoord); + else + for (var i = 0; i < coords.Count; i++) + { + var otherC = coords[i]; + if (!(thisCoord.X < otherC.X + ProjectedTolerance) || + !(thisCoord.Y < otherC.Y + ProjectedTolerance)) + { + if (i != coords.Count - 1) continue; + + coords.Add(thisCoord); + break; + } + coords.Insert(i, thisCoord); + break; + } + } + } + return coords; + } /// /// Configure coordinate systems and transformations to be used for constructing graticule lines @@ -926,7 +1167,7 @@ private void InitCoordinateSystem(int mapSrid) _gcsDomain = null; _unProject = null; _project = null; - _previousExtents = null; + _oldViewExtents = null; _pcsUnitSuffix = string.Empty; if (_srid == 0) return; @@ -944,10 +1185,10 @@ private void InitCoordinateSystem(int mapSrid) case IProjectedCoordinateSystem pcs: _pcsDomain = GetCrsDomain(pcs); - - _gcsDomain = _srid == GeoSpatialMath.WebMercatorSrid - // ok - technically it's 85.06, but for plotting geographic ticks 85 is a nice cutoff - ? new Envelope(-180,180,-85,85) //new Envelope(-180,180,-85.06,85.06) + + _gcsDomain = _srid == GeoSpatialMath.WebMercatorSrid + // ok - technically it's 85.06, but 85 good for rendering aesthetics + ? new Envelope(-180, 180, -85, 85) //new Envelope(-180,180,-85.06,85.06) : GetCrsDomain(pcs.GeographicCoordinateSystem); _pcsUnitSuffix = !string.IsNullOrEmpty(pcs.LinearUnit.Abbreviation) ? pcs.LinearUnit.Abbreviation : @@ -997,22 +1238,24 @@ private Envelope GetCrsDomain(ICoordinateSystem crs) /// /// /// - private void CalculateMetrics(Graphics g, MapViewport map) + /// Refer to <see cref="PcsGraticuleMode"/> + private void CalculateMetrics(Graphics g, MapViewport map, bool webMercatorScaleLinesActive) { _pcsConstrExtents = null; _gcsConstrExtents = null; _viewClipPolygon = null; - _previousExtents = map.Envelope; - _pcsNumSubdivisions = PcsGraticuleStyle.NumSubdivisions; - _gcsNumSubdivisions = GcsGraticuleStyle.NumSubdivisions; + _oldViewExtents = map.Envelope; + _oldPcsNumSubdivisions = PcsGraticuleStyle.NumSubdivisions; + _oldGcsNumSubdivisions = GcsGraticuleStyle.NumSubdivisions; + _oldPcsGraticuleMode = PcsGraticuleMode; _mapScale = map.GetMapScale((int) g.DpiX); if (_coordinateSystem is IProjectedCoordinateSystem) { // pcsConstrExtents is expanded to the next multiple of division - _pcsConstrExtents = CalcPcsConstrExtents(_previousExtents); + _pcsConstrExtents = CalcPcsConstrExtents(_oldViewExtents, webMercatorScaleLinesActive); // un-project viewEnv - all 4 corners essential for WebMercator try @@ -1020,10 +1263,10 @@ private void CalculateMetrics(Graphics g, MapViewport map) var coords = _unProject.TransformList( new List() { - _previousExtents.BottomLeft(), - _previousExtents.TopLeft(), - _previousExtents.TopRight(), - _previousExtents.BottomRight() + _oldViewExtents.BottomLeft(), + _oldViewExtents.TopLeft(), + _oldViewExtents.TopRight(), + _oldViewExtents.BottomRight() }); _gcsConstrExtents = CalcGcsConstrExtents( @@ -1036,12 +1279,12 @@ private void CalculateMetrics(Graphics g, MapViewport map) } catch (Exception ex) { - _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); + _logger.WarnFormat("SRID {0} Env {1} Rotation {2}", _srid, map.Envelope, map.MapTransformRotation); _logger.Error(ex); } } else - _gcsConstrExtents = CalcGcsConstrExtents(_previousExtents); + _gcsConstrExtents = CalcGcsConstrExtents(_oldViewExtents); // used to trim graticule lines immediately prior to rendering _viewClipPolygon = new Polygon(new LinearRing(new[] @@ -1054,39 +1297,34 @@ private void CalculateMetrics(Graphics g, MapViewport map) } )); - if (!map.MapTransformRotation.Equals(0f)) + if (!map.MapTransformRotation.Equals(0f)) { var at = AffineTransformation.RotationInstance( - Degrees.ToRadians(map.MapTransformRotation), map.Center.X, map.Center.Y); + Degrees.ToRadians(map.MapTransformRotation), map.Center.X, map.Center.Y); _viewClipPolygon = (Polygon) at.Transform(_viewClipPolygon); } // special handling for Web Mercator to ensure curved meridian lines are correctly trimmed if (_srid == GeoSpatialMath.WebMercatorSrid && _viewClipPolygon.Intersects(_webMercatorClipPolygon)) - _viewClipPolygon = (Polygon)_viewClipPolygon.Intersection(_webMercatorClipPolygon); + _viewClipPolygon = (Polygon) _viewClipPolygon.Intersection(_webMercatorClipPolygon); } /// /// Calculate the primary and secondary intervals based upon the dimensions of /// /// + /// Refer to <see cref="PcsGraticuleMode"/> /// Envelope snapped to multiples of the calculated secondary interval - private Envelope CalcPcsConstrExtents(Envelope viewEnv) + private Envelope CalcPcsConstrExtents(Envelope viewEnv, bool webMercatorScaleLinesActive) { PcsGraticuleStyle.Division = CalcDivisor(10, PcsPowerRangeMin, PcsPowerRangeMax, _pcsPreferredMultiples, viewEnv.MinExtent / 2); PcsGraticuleStyle.Subdivision = PcsGraticuleStyle.Division / PcsGraticuleStyle.NumSubdivisions; - switch (_srid) - { - case GeoSpatialMath.WebMercatorSrid: - // special handling applying latitude-dependent scale factor - return CalcConstExtentsWebMercator(viewEnv, PcsGraticuleStyle.Subdivision); - default: - // regular rectilinear grid - return CalcConstrExtentsRectilinear(viewEnv, PcsGraticuleStyle.Subdivision); - } + return webMercatorScaleLinesActive + ? CalcConstExtentsWebMercator(viewEnv, PcsGraticuleStyle.Subdivision) + : CalcConstrExtentsRectilinear(viewEnv, PcsGraticuleStyle.Subdivision); } /// @@ -1102,15 +1340,24 @@ private Envelope CalcGcsConstrExtents(Envelope viewEnvDegrees) GcsGraticuleStyle.Division = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, _gcsPreferredMultiples, halfMinExtent); - // 2 degrees with GcsNumSubdivisions = 3 would be a lousy subdivision so.... - // Treat GcsNumSubdivisions as PREFERRED number of subdivisions and determine actual - // number of subdivisions to give sensible units in base 60 (ie deg min sec) - // If GcsNumSubdivisions == 4, then it is better to start at 3 - GcsGraticuleStyle.Subdivision = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, - _gcsPreferredMultiples, GcsGraticuleStyle.Division / - (GcsGraticuleStyle.NumSubdivisions == 4 - ? 3 - : GcsGraticuleStyle.NumSubdivisions)); + // this COULD be a nice subdivision (eg 1deg / 3 = 20"), or it could be lousy (eg 2deg / 3 = 40") + var test1 = GcsGraticuleStyle.Division / GcsGraticuleStyle.NumSubdivisions; + var test2 = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, + _gcsPreferredMultiples, test1); + + if (Math.Abs(test1 - test2) < GeographicTolerance) + GcsGraticuleStyle.Subdivision = test2; + else + { + // Treat GcsNumSubdivisions as PREFERRED number of subdivisions and determine actual + // number of subdivisions to give sensible units in base 60 (ie deg min sec) + // If GcsNumSubdivisions == 4, then it is better to start at 3 + GcsGraticuleStyle.Subdivision = CalcDivisor(60, GcsPowerRangeMin, GcsPowerRangeMax, + _gcsPreferredMultiples, GcsGraticuleStyle.Division / + (GcsGraticuleStyle.NumSubdivisions == 4 + ? 3 + : GcsGraticuleStyle.NumSubdivisions)); + } return CalcConstrExtentsRectilinear(viewEnvDegrees, GcsGraticuleStyle.Subdivision); } @@ -1139,7 +1386,6 @@ private double CalcDivisor(int multiplierBase, int minPower, int maxPower, return candidate; } } - return candidate; } @@ -1170,9 +1416,8 @@ private Envelope CalcConstrExtentsRectilinear(Envelope viewEnv, double secondary } /// - /// Determine if east-west extents of need to be adjusted to - /// ensure that all scale-corrected meridians within view extent will plot - /// Calculated envelope will often be significantly larger than + /// Adjust east-west extents of to ensure ALL + /// scale-distortion meridian lines passing through view extent will plot /// /// /// @@ -1181,21 +1426,32 @@ private Envelope CalcConstExtentsWebMercator(Envelope viewEnv, double secondaryI { double minX, maxX; - if (viewEnv.MinX > 0) - // if LHS lies to the RIGHT of central meridian, calculate equatorial X + if (viewEnv.MinX < 0 && viewEnv.MinY <= 0 && viewEnv.MaxY >= 0) + // when LHS lies to WEST of central meridian AND view spans equator + minX = viewEnv.MinX; + else if (viewEnv.MinX < 0) + // MIN when LHS lies to WEST of central meridian minX = CalcEquatorialX(new Coordinate(viewEnv.MinX, - Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); + Math.Min(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); else - minX = viewEnv.MinX; + // MAX when LHS lies to EAST of central meridian + minX = CalcEquatorialX(new Coordinate(viewEnv.MinX, + Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); - if (viewEnv.MaxX < 0) - // if RHS lies to the LEFT of central meridian, calculate equatorial X + if (viewEnv.MaxX > 0 && viewEnv.MinY <= 0 && viewEnv.MaxY >= 0) + // when RHS lies to EAST of central meridian AND view spans equator + maxX = viewEnv.MaxX; + else if (viewEnv.MaxX > 0) + // MIN when RHS lies to EAST of central meridian maxX = CalcEquatorialX(new Coordinate(viewEnv.MaxX, - Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); + Math.Min(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); else - maxX = viewEnv.MaxX; + // MAX when RHS lies to WEST of central meridian + maxX = CalcEquatorialX(new Coordinate(viewEnv.MaxX, + Math.Max(Math.Abs(viewEnv.MinY), Math.Abs(viewEnv.MaxY)))); - return CalcConstrExtentsRectilinear(new Envelope(minX, maxX, viewEnv.MinY, viewEnv.MaxY), secondaryInterval); + return CalcConstrExtentsRectilinear(new Envelope(minX, maxX, viewEnv.MinY, viewEnv.MaxY), + secondaryInterval); } /// diff --git a/SharpMap/Rendering/Decoration/GraticuleStyle.cs b/SharpMap/Rendering/Decoration/GraticuleStyle.cs index bb6fff89..4fa379a3 100644 --- a/SharpMap/Rendering/Decoration/GraticuleStyle.cs +++ b/SharpMap/Rendering/Decoration/GraticuleStyle.cs @@ -19,12 +19,33 @@ public class GraticuleStyle private int _primaryTickSize = 10; private int _secondaryTickSize = 5; + /// + /// Apply a styling theme to a Graticule Style + /// public enum GraticuleTheme { Bold, Subtle, None } + + /// + /// Define how a PcsGraticuleStyle will render + /// + public enum PcsGraticuleMode + { + /// + /// Classic rectilinear graticule + /// + Standard, + + /// + /// Overrides Projected graticule behaviour ONLY for Web Mercator (SRID 3857), causing + /// the graticule to be rendered as the meridian scale distortion lines from equator + /// to the poles. Can be used in conjunction or as an alternative to a ScaleBar. + /// + WebMercatorScaleLines + } /// /// Enumeration defining which borders should be labelled @@ -221,7 +242,7 @@ public int SecondaryTickSize /// /// Number of intervals to appear between Primary graticule lines (or zero to disable Secondary graticule) /// - public int NumSubdivisions { get; set; } = 4; + public int NumSubdivisions { get; set; } = 2; /// /// Minimum visible zoom level for rendering, or zero for not applicable diff --git a/UnitTests/UnitTestsFixture.cs b/UnitTests/UnitTestsFixture.cs index 11f20c13..85a4977f 100644 --- a/UnitTests/UnitTestsFixture.cs +++ b/UnitTests/UnitTestsFixture.cs @@ -21,6 +21,10 @@ public void RunBeforeAnyTests() .SetCoordinateSystemServices(css) .SetCoordinateSystemRepository(css); + // plug-in WebMercator so that correct spherical definition is directly available to Layer Transformations using SRID + var pcs = (ProjNet.CoordinateSystems.ProjectedCoordinateSystem)ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator; + css.AddCoordinateSystem((int)pcs.AuthorityCode, pcs); + _stopWatch = new System.Diagnostics.Stopwatch(); System.Diagnostics.Trace.WriteLine("Starting tests"); _stopWatch.Start(); From 542c14243fdaf053c9d70b526de5ee3f09993d7b Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 20 Jul 2019 22:03:51 +0700 Subject: [PATCH 101/186] Move Graticule classes and enums to appropriate namespace --- Examples/WinFormSamples/Form2.cs | 3 +- .../Decoration/{ => Graticule}/Graticule.cs | 36 +- .../Decoration/Graticule/GraticuleBorders.cs | 42 ++ .../Graticule/GraticuleLineStyle.cs | 25 ++ .../{ => Graticule}/GraticuleStyle.cs | 94 +---- .../Decoration/Graticule/PcsGraticuleMode.cs | 20 + .../Decoration/Graticule/GraticuleTest.cs | 362 ++++++++++++++++++ UnitTests/UnitTests.csproj | 1 + 8 files changed, 477 insertions(+), 106 deletions(-) rename SharpMap/Rendering/Decoration/{ => Graticule}/Graticule.cs (98%) create mode 100644 SharpMap/Rendering/Decoration/Graticule/GraticuleBorders.cs create mode 100644 SharpMap/Rendering/Decoration/Graticule/GraticuleLineStyle.cs rename SharpMap/Rendering/Decoration/{ => Graticule}/GraticuleStyle.cs (81%) create mode 100644 SharpMap/Rendering/Decoration/Graticule/PcsGraticuleMode.cs create mode 100644 UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs diff --git a/Examples/WinFormSamples/Form2.cs b/Examples/WinFormSamples/Form2.cs index 76f5e0b9..7743604b 100644 --- a/Examples/WinFormSamples/Form2.cs +++ b/Examples/WinFormSamples/Form2.cs @@ -3,6 +3,7 @@ using BruTile.Predefined; using SharpMap.Data; using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Decoration.Graticule; using SharpMap.Rendering.Decoration.ScaleBar; namespace WinFormSamples @@ -65,7 +66,7 @@ private void Form2_Load(object sender, EventArgs e) this.mapBox1.Map.Decorations.Add(new Graticule() { Enabled = chkGraticule.Checked, - PcsGraticuleMode = GraticuleStyle.PcsGraticuleMode.WebMercatorScaleLines, + PcsGraticuleMode = PcsGraticuleMode.WebMercatorScaleLines, PcsGraticuleStyle = { NumSubdivisions = 2 diff --git a/SharpMap/Rendering/Decoration/Graticule.cs b/SharpMap/Rendering/Decoration/Graticule/Graticule.cs similarity index 98% rename from SharpMap/Rendering/Decoration/Graticule.cs rename to SharpMap/Rendering/Decoration/Graticule/Graticule.cs index 79112b7a..57b0e63d 100644 --- a/SharpMap/Rendering/Decoration/Graticule.cs +++ b/SharpMap/Rendering/Decoration/Graticule/Graticule.cs @@ -8,14 +8,14 @@ using GeoAPI.CoordinateSystems.Transformations; using GeoAPI.Geometries; using NetTopologySuite.Geometries; -using SharpMap.Utilities; using NetTopologySuite.Geometries.Utilities; using NetTopologySuite.Utilities; using SharpMap.Styles; +using SharpMap.Utilities; using Matrix = System.Drawing.Drawing2D.Matrix; using Point = NetTopologySuite.Geometries.Point; -namespace SharpMap.Rendering.Decoration +namespace SharpMap.Rendering.Decoration.Graticule { /// /// Map Decoration to draw projected and/or geographic graticule on the map. @@ -73,7 +73,7 @@ private readonly double[] private Envelope _gcsConstrExtents; private int _oldPcsNumSubdivisions; private int _oldGcsNumSubdivisions; - private GraticuleStyle.PcsGraticuleMode _oldPcsGraticuleMode; + private PcsGraticuleMode _oldPcsGraticuleMode; /// /// Helper class for managing graticule geometry @@ -112,8 +112,8 @@ private enum LabelEnds /// Defines how Web Mercator Projected Graticule will be rendered. /// Either as a standard rectilinear graticule, or as meridian scale distortion lines /// - public GraticuleStyle.PcsGraticuleMode PcsGraticuleMode { get; set; } = - GraticuleStyle.PcsGraticuleMode.Standard; + public PcsGraticuleMode PcsGraticuleMode { get; set; } = + PcsGraticuleMode.Standard; /// /// Graticule style definition for the Geographic Coordinate System @@ -129,15 +129,15 @@ public Graticule() BackgroundColor = Color.Transparent; PcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Bold, - GraticuleStyle.GraticuleLineStyle.Continuous, true, - GraticuleStyle.GraticuleDecorationBorders.LeftBottom) + GraticuleLineStyle.Continuous, true, + GraticuleBorders.LeftBottom) { SecondaryPen = {DashStyle = DashStyle.Dash} }; GcsGraticuleStyle = new GraticuleStyle(GraticuleStyle.GraticuleTheme.Subtle, - GraticuleStyle.GraticuleLineStyle.HollowTick, false, - GraticuleStyle.GraticuleDecorationBorders.RightTop); + GraticuleLineStyle.HollowTick, false, + GraticuleBorders.RightTop); } protected override Size InternalSize(Graphics g, MapViewport map) @@ -155,7 +155,7 @@ protected override void OnRender(Graphics g, MapViewport map) if (_coordinateSystem == null) return; var webMercatorScaleLinesActive = _srid == GeoSpatialMath.WebMercatorSrid && - PcsGraticuleMode == GraticuleStyle.PcsGraticuleMode + PcsGraticuleMode == PcsGraticuleMode .WebMercatorScaleLines; if (_oldViewExtents is null || !_oldViewExtents.Equals(map.Envelope) || @@ -195,7 +195,7 @@ private void OnRenderInternal(Graphics g, MapViewport map, GraticuleStyle style, { var visibleRef = style.VisibilityUnits == VisibilityUnits.Scale ? _mapScale : map.Zoom; - if (style.Division <= 0 || style.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.None || + if (style.Division <= 0 || style.PrimaryLineStyle == GraticuleLineStyle.None || visibleRef <= style.MinVisible || visibleRef > style.MaxVisible || constrExtents == null || constrExtents.IsNull) return; @@ -269,11 +269,11 @@ def.WcsGraticule .Coordinates.Last() if (webMercatorScaleLinesActive) return false; if (def.IsPrimary) - return s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.SolidTick || - s.PrimaryLineStyle == GraticuleStyle.GraticuleLineStyle.HollowTick; + return s.PrimaryLineStyle == GraticuleLineStyle.SolidTick || + s.PrimaryLineStyle == GraticuleLineStyle.HollowTick; - return s.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.SolidTick || - s.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.HollowTick; + return s.SecondaryLineStyle == GraticuleLineStyle.SolidTick || + s.SecondaryLineStyle == GraticuleLineStyle.HollowTick; }).ToArray(); var linesOnly = graticuleDefs.Except(ticksAndEdgeCuts).ToArray(); @@ -329,7 +329,7 @@ private List CalculateParallels(GraticuleStyle style, Envelope con var isPrimaryParallel = IsPrimaryInterval(thisY, style.Division, tolerance); - if (!isPrimaryParallel && style.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.None) continue; + if (!isPrimaryParallel && style.SecondaryLineStyle == GraticuleLineStyle.None) continue; if (ExceedsResolution(style, isPrimaryParallel)) continue; @@ -413,7 +413,7 @@ private List CalculateMeridians(GraticuleStyle style, Envelope con var thisX = constrExtents.MinX + i * style.Subdivision; var isPrimaryMeridian = IsPrimaryInterval(thisX, style.Division, tolerance); - if (!isPrimaryMeridian && style.SecondaryLineStyle == GraticuleStyle.GraticuleLineStyle.None) continue; + if (!isPrimaryMeridian && style.SecondaryLineStyle == GraticuleLineStyle.None) continue; if (ExceedsResolution(style, isPrimaryMeridian)) continue; @@ -838,7 +838,7 @@ private LabelEnds GetLabelEnds(GraticuleStyle style, GraticuleDef def, float map { if (!def.IsPrimary && !style.LabelSubdivisions) return LabelEnds.None; - if (style.LabelBorders == GraticuleStyle.GraticuleDecorationBorders.All) return LabelEnds.Both; + if (style.LabelBorders == GraticuleBorders.All) return LabelEnds.Both; var ends = LabelEnds.None; diff --git a/SharpMap/Rendering/Decoration/Graticule/GraticuleBorders.cs b/SharpMap/Rendering/Decoration/Graticule/GraticuleBorders.cs new file mode 100644 index 00000000..63a27b11 --- /dev/null +++ b/SharpMap/Rendering/Decoration/Graticule/GraticuleBorders.cs @@ -0,0 +1,42 @@ +using System; + +namespace SharpMap.Rendering.Decoration.Graticule +{ + /// + /// Enumeration defining which borders should be labelled + /// + [Flags] + public enum GraticuleBorders + { + /// + /// No borders + /// + None = 0, + + /// + /// Label Left and Top borders + /// + LeftTop = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top, + + /// + /// Label Left and Bottom borders + /// + LeftBottom = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Bottom, + + /// + /// Label Right and Top borders + /// + RightTop = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Top, + + /// + /// Label Right and Bottom borders + /// + RightBottom = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, + + /// + /// Label all borders + /// + All = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top | MapDecorationAnchorFlags.Right | + MapDecorationAnchorFlags.Bottom, + } +} diff --git a/SharpMap/Rendering/Decoration/Graticule/GraticuleLineStyle.cs b/SharpMap/Rendering/Decoration/Graticule/GraticuleLineStyle.cs new file mode 100644 index 00000000..1f58a0eb --- /dev/null +++ b/SharpMap/Rendering/Decoration/Graticule/GraticuleLineStyle.cs @@ -0,0 +1,25 @@ +namespace SharpMap.Rendering.Decoration.Graticule +{ + public enum GraticuleLineStyle + { + /// + /// Do not draw line (or ticks) + /// + None = 0, + + /// + /// Parallels and meridians plot as continuous lines + /// + Continuous = 1, + + /// + /// Plot intersections of parallels and meridians only, using a Solid tick mark + /// + SolidTick = 2, + + /// + /// Plot intersections of parallels and meridians only, using a Hollow tick mark + /// + HollowTick = 3 + } +} diff --git a/SharpMap/Rendering/Decoration/GraticuleStyle.cs b/SharpMap/Rendering/Decoration/Graticule/GraticuleStyle.cs similarity index 81% rename from SharpMap/Rendering/Decoration/GraticuleStyle.cs rename to SharpMap/Rendering/Decoration/Graticule/GraticuleStyle.cs index 4fa379a3..9f7262af 100644 --- a/SharpMap/Rendering/Decoration/GraticuleStyle.cs +++ b/SharpMap/Rendering/Decoration/Graticule/GraticuleStyle.cs @@ -1,16 +1,15 @@ -using System; using System.Drawing; using System.Drawing.Drawing2D; using SharpMap.Styles; -namespace SharpMap.Rendering.Decoration +namespace SharpMap.Rendering.Decoration.Graticule { /// /// Graticule rendering properties, with Primary (major) and Secondary (minor) intervals. /// Use , , and /// to define how a graticule will render, and configure other properties to tune layout and formatting. /// - public class GraticuleStyle + public partial class GraticuleStyle { private GraphicsPath _primaryTick; private GraphicsPath _secondaryTick; @@ -24,88 +23,9 @@ public class GraticuleStyle /// public enum GraticuleTheme { - Bold, - Subtle, - None - } - - /// - /// Define how a PcsGraticuleStyle will render - /// - public enum PcsGraticuleMode - { - /// - /// Classic rectilinear graticule - /// - Standard, - - /// - /// Overrides Projected graticule behaviour ONLY for Web Mercator (SRID 3857), causing - /// the graticule to be rendered as the meridian scale distortion lines from equator - /// to the poles. Can be used in conjunction or as an alternative to a ScaleBar. - /// - WebMercatorScaleLines - } - - /// - /// Enumeration defining which borders should be labelled - /// - [Flags] - public enum GraticuleDecorationBorders - { - /// - /// No borders - /// - None = 0, - - /// - /// Label Left and Top borders - /// - LeftTop = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top, - - /// - /// Label Left and Bottom borders - /// - LeftBottom = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Bottom, - - /// - /// Label Right and Top borders - /// - RightTop = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Top, - - /// - /// Label Right and Bottom borders - /// - RightBottom = MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, - - /// - /// Label all borders - /// - All = MapDecorationAnchorFlags.Left | MapDecorationAnchorFlags.Top | MapDecorationAnchorFlags.Right | MapDecorationAnchorFlags.Bottom, - - } - - public enum GraticuleLineStyle - { - /// - /// Do not draw line (or ticks) - /// - None, - - /// - /// Parallels and meridians plot as continuous lines - /// - Continuous, - - /// - /// Plot intersections of parallels and meridians only, using a Solid tick mark - /// - SolidTick, - - /// - /// Plot intersections of parallels and meridians only, using a Hollow tick mark - /// - HollowTick + Bold = 0, + Subtle = 1, + None = 2 } /// @@ -179,7 +99,7 @@ public int SecondaryTickSize /// /// Edges to be labelled, taking into account any map rotation /// - public GraticuleDecorationBorders LabelBorders { get; set; } = GraticuleDecorationBorders.LeftBottom; + public GraticuleBorders LabelBorders { get; set; } = GraticuleBorders.LeftBottom; /// /// Font for labelling primary graticule lines @@ -273,7 +193,7 @@ public GraticuleStyle() public GraticuleStyle(GraticuleTheme theme, GraticuleLineStyle lineStyle, bool withSecondaryIntervals, - GraticuleDecorationBorders labelBorders) : this() + GraticuleBorders labelBorders) : this() { switch (theme) { diff --git a/SharpMap/Rendering/Decoration/Graticule/PcsGraticuleMode.cs b/SharpMap/Rendering/Decoration/Graticule/PcsGraticuleMode.cs new file mode 100644 index 00000000..5d6b689f --- /dev/null +++ b/SharpMap/Rendering/Decoration/Graticule/PcsGraticuleMode.cs @@ -0,0 +1,20 @@ +namespace SharpMap.Rendering.Decoration.Graticule +{ + /// + /// Define how a PcsGraticuleStyle will render + /// + public enum PcsGraticuleMode + { + /// + /// Classic rectilinear graticule + /// + Standard = 0, + + /// + /// Overrides Projected graticule behaviour ONLY for Web Mercator (SRID 3857), causing + /// the graticule to be rendered as the meridian scale distortion lines from equator + /// to the poles. Can be used in conjunction or as an alternative to a ScaleBar. + /// + WebMercatorScaleLines = 1 + } +} diff --git a/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs new file mode 100644 index 00000000..a9dce061 --- /dev/null +++ b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs @@ -0,0 +1,362 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using GeoAPI.CoordinateSystems; +using GeoAPI.Geometries; +using NUnit.Framework; +using SharpMap; +using SharpMap.Data.Providers; +using SharpMap.Layers; +using SharpMap.Rendering.Decoration; +using SharpMap.Rendering.Decoration.Graticule; +using SharpMap.Utilities; +using Point = NetTopologySuite.Geometries.Point; + +namespace UnitTests.Rendering.Decoration.Graticule +{ + [TestFixture] + public class GraticuleTest + { + private const double SecondOfArcDecimalPlaces = 1e-4; // approx. 1mm at the equator + private readonly Envelope _gcsDomain = new Envelope(-180, 180, -90, 90); + private readonly Envelope _gcsWebMercDomain = new Envelope(-180, 180, -85, 85); + + [TestCase(2500,0)] + [TestCase(2500,60)] + [TestCase(2500,120)] + [TestCase(2500,180)] + [TestCase(2500,240)] + [TestCase(1000,0)] + [TestCase(500,0)] + [TestCase(100,0)] + [TestCase(50,0)] + [TestCase(20,0)] + [TestCase(10,0)] + [TestCase(5,0)] + [TestCase(2,0)] + [TestCase(1,0)] + [TestCase(0.5,0)] + [TestCase(0.25,0)] + [TestCase(0.1,0)] + [TestCase(0.05,0)] + [TestCase(0.01,0)] + public void TestGraticuleWgs84(double scale, float mapRotationDeg) + { + using (var map = GetMap(4326, new Coordinate(0.5,-0.5),mapRotationDeg)) + { + map.MapScale = scale; + + var graticule = map.Decorations[0] as SharpMap.Rendering.Decoration.Graticule.Graticule; + + CalculateGraticule(map, graticule); + + var gcsStyle = graticule.GcsGraticuleStyle; + if (gcsStyle.SecondaryLineStyle != GraticuleLineStyle.None) + map.Layers.Add(CreateLayer("Gcs Secondary", 4326, 4326, + map.Envelope,_gcsDomain, Brushes.Orange, 6, gcsStyle.Subdivision)); + + map.Layers.Add(CreateLayer("Gcs Primary", 4326,4326, + map.Envelope, _gcsDomain,Brushes.Red, 10, gcsStyle.Division)); + + SaveMap(map, true); + + } + } + + [TestCase(500000,0)] + [TestCase(2500,0)] + [TestCase(2500,60)] + [TestCase(2500,120)] + [TestCase(2500,180)] + [TestCase(2500,240)] + [TestCase(1000,0)] + [TestCase(500,0)] + [TestCase(100,0)] + public void TestGraticuleWebMercator(double scale, float mapRotationDeg) + { + using (var map = GetMap(3857, new Coordinate(19300000,-5010000),mapRotationDeg)) + { + map.MapScale = scale; + + var graticule = map.Decorations[0] as SharpMap.Rendering.Decoration.Graticule.Graticule; + CalculateGraticule(map, graticule); + + // Projected + var pcsStyle = graticule.PcsGraticuleStyle; + if (pcsStyle.SecondaryLineStyle != GraticuleLineStyle.None) + map.Layers.Add(CreateLayer("Pcs Secondary", map.SRID, map.SRID, + map.Envelope, GeoSpatialMath.WebMercatorEnv, Brushes.CadetBlue, 8, pcsStyle.Subdivision)); + + map.Layers.Add(CreateLayer("Pcs Primary", map.SRID, map.SRID, + map.Envelope, GeoSpatialMath.WebMercatorEnv, Brushes.DodgerBlue, 12, pcsStyle.Division)); + + // Geographic + var unProjectedEnv = TransformBox(map.Envelope, map.SRID, 4326); + var gcsStyle = graticule.GcsGraticuleStyle; + if (gcsStyle.SecondaryLineStyle != GraticuleLineStyle.None) + map.Layers.Add(CreateLayer("Gcs Secondary", 4326, map.SRID, + unProjectedEnv, _gcsWebMercDomain, Brushes.Orange, 6, gcsStyle.Subdivision)); + + map.Layers.Add(CreateLayer("Gcs Primary", 4326, map.SRID, + unProjectedEnv, _gcsWebMercDomain, Brushes.Red, 10, gcsStyle.Division)); + + map.BackgroundLayer.Add(GetBruTileLayer()); + + SaveMap(map, false); + } + } + + [TestCase(500000,0)] + [TestCase(2500,0)] + [TestCase(2500,60)] + [TestCase(2500,120)] + [TestCase(2500,180)] + [TestCase(2500,240)] + [TestCase(1000,0)] + [TestCase(500,0)] + [TestCase(100,0)] + public void TestGraticuleInd75Utm47N(double scale, float mapRotationDeg) + { + // PCS = 24047 and GCS = 4240 + using (var map = GetMap(24047, new Coordinate(700000,1000000),mapRotationDeg)) + { + map.MapScale = scale; + + var graticule = map.Decorations[0] as SharpMap.Rendering.Decoration.Graticule.Graticule; + CalculateGraticule(map, graticule); + + // Projected + var pcsStyle = graticule.PcsGraticuleStyle; + var pcsDomain = new Envelope(166021.44, 534994.66,0.00 ,9329005.18); + if (pcsStyle.SecondaryLineStyle != GraticuleLineStyle.None) + map.Layers.Add(CreateLayer("Pcs Secondary", map.SRID, map.SRID, + map.Envelope, pcsDomain , Brushes.CadetBlue, 8, pcsStyle.Subdivision)); + + map.Layers.Add(CreateLayer("Pcs Primary", map.SRID, map.SRID, + map.Envelope, pcsDomain, Brushes.DodgerBlue, 12, pcsStyle.Division)); + + // Geographic + var unProjectedEnv = TransformBox(map.Envelope, map.SRID, 4240); + var gcsStyle = graticule.GcsGraticuleStyle; + if (gcsStyle.SecondaryLineStyle != GraticuleLineStyle.None) + map.Layers.Add(CreateLayer("Gcs Secondary", 4240, map.SRID, + unProjectedEnv, _gcsWebMercDomain, Brushes.Orange, 6, gcsStyle.Subdivision)); + + map.Layers.Add(CreateLayer("Gcs Primary", 4240, map.SRID, + unProjectedEnv, _gcsWebMercDomain, Brushes.Red, 10, gcsStyle.Division)); + + // can't do this - it's 3857 and doesn't project to any other Map.SRID + //map.BackgroundLayer.Add(GetBruTileLayer()); + + SaveMap(map, false); + } + } + + private void SaveMap(Map map, bool isGeographic) + { + var x = GetFormattedLabel(isGeographic, map.Center.X, AxisOrientationEnum.East).Replace(",",""); + var y = GetFormattedLabel(isGeographic, map.Center.Y, AxisOrientationEnum.North).Replace(",",""); + var s = map.MapScale.ToString("00000.###").Replace(".", "-"); + var fn = $"Graticule SRID {map.SRID} Scale {s} Center {x} {y} Rotn {map.MapTransformRotation:N0}.png"; + using (var img = map.GetMap(96)) + img.Save(Path.Combine(UnitTestsFixture.GetImageDirectory(this), fn),ImageFormat.Png); + } + + private void CalculateGraticule(MapViewport map, SharpMap.Rendering.Decoration.Graticule.Graticule graticule) + { + using (var img = new Bitmap(map.Size.Width, map.Size.Height, PixelFormat.Format32bppArgb)) + using (var g = Graphics.FromImage(img)) + graticule.Render(g, map); + } + + private Map GetMap(int srid, Coordinate center, float mapRotationDeg) + { + var map = new Map(new Size(800,640)); + map.SRID= srid; + map.Center = center; + map.BackColor = Color.BlanchedAlmond; + + if (!mapRotationDeg.Equals(0f)) + { + var matrix = new System.Drawing.Drawing2D.Matrix(); + matrix.RotateAt(mapRotationDeg, new PointF(map.Size.Width * 0.5f, map.Size.Height* 0.5f)); + map.MapTransform = matrix; + } + + map.Decorations.Add(new SharpMap.Rendering.Decoration.Graticule.Graticule + { + GcsGraticuleStyle = {PrimaryLineStyle = GraticuleLineStyle.SolidTick} + }); + + map.Decorations.Add(new EyeOfSight()); + + map.Disclaimer = "FEATURE LAYER DOTS SHOULD COINCIDE WITH GRATICULE TICKS"; + + return map; + } + + private Envelope TransformBox(Envelope env, int sourceSrid, int targetSrid) + { + var transform = Session.Instance.CoordinateSystemServices.CreateTransformation(sourceSrid, targetSrid); + + var ll = transform.MathTransform.Transform(env.BottomLeft().ToDoubleArray()); + var ur = transform.MathTransform.Transform(env.TopRight().ToDoubleArray()); + + return new Envelope(new Coordinate(ll[0], ll[1]), + new Coordinate(ur[0], ur[1])); + } + + private ILayer CreateLayer(string layerName, int sourceSrid, int targetSrid, Envelope viewExtents, Envelope crsDomain, Brush symColour, int symSize, double interval) + { + var gp = new GeometryProvider(Point.Empty); + gp.SRID = sourceSrid; + + var originX = Math.Floor(viewExtents.MinX / interval) * interval; + var originY = Math.Floor(viewExtents.MinY / interval) * interval; + + var coord = new Coordinate(); + + var thisX = originX; + while (thisX < viewExtents.MaxX) + { + var thisY = originY; + while (thisY < viewExtents.MaxY) + { + coord.X = thisX; + coord.Y = thisY; + if (crsDomain.Contains(coord)) + gp.Geometries.Add(new Point(thisX, thisY)); + thisY += interval; + } + thisX += interval; + } + + var vl = new VectorLayer(layerName) + { + DataSource = gp, + TargetSRID = targetSrid, + Style = {PointColor = symColour, PointSize = symSize} + }; + return vl; + } + + private ILayer GetBruTileLayer() + { + var cacheFolder = "";//System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BruTileCache", "Osm"); + var lyrBruTile = new TileLayer( + BruTile.Predefined.KnownTileSources.Create(BruTile.Predefined.KnownTileSource.OpenStreetMap), + "Tiles", Color.Transparent, true, cacheFolder) + { + SRID = 3857, + TargetSRID = 3857 + }; + return lyrBruTile; + + + } + + + [Ignore ("Time consuming test that has already been validated")] + [TestCase(7, AxisOrientationEnum.North )] + public void TestDmsLabel(double degree, AxisOrientationEnum axis) + { + char[] split = {'°', '\'', '"', 'N', 'S', 'E', 'W'}; + + var until = Math.Truncate(degree + 1); + + do + { + var dms = GetFormattedLabel(true, degree, axis); + var tokens = dms.Split(split, StringSplitOptions.RemoveEmptyEntries); + var dec = double.Parse(tokens[0]); + if (tokens.Length >= 3) + dec += double.Parse(tokens[2]) / 3600; + if (tokens.Length >= 2) + dec += double.Parse(tokens[1]) / 60; + + Assert.AreEqual(degree, dec, 2.8E-8d, $"{degree:N8} {dms} {dec:N8}"); + + degree += 0.00000001; + } while (degree < until); + + + } + + private string GetFormattedLabel(bool isGeographicCoordinateSystem, double value, AxisOrientationEnum axis) + { + var axisSuffix = string.Empty; + switch (axis) + { + case AxisOrientationEnum.North: + axisSuffix = value >= 0 ? "N" : "S"; + break; + + case AxisOrientationEnum.East: + axisSuffix = value >= 0 ? "E" : "W"; + break; + } + + int dp; + + if (!isGeographicCoordinateSystem) + { + dp = GetDecimalPlaces(value, 3); + return Math.Abs(value).ToString($"N{dp}") + "m" + axisSuffix; + } + + // DMS: 8dp approx = 1mm (= 1" arc to 4dp) + var deg = Math.Round(Math.Abs(value), 8, MidpointRounding.AwayFromZero); + var iDeg = (int) (deg); // equiv to Math.Truncate + var dec = deg - iDeg; + + var mins = dec * 60; + var iMin = (int) (mins); // equiv to Math.Truncate + + var secs = Math.Round(deg * 3600 - (iDeg * 3600) - (iMin * 60), 4, MidpointRounding.AwayFromZero); + + if (Math.Abs(secs - 60) < SecondOfArcDecimalPlaces) + { + secs = 0; + iMin += 1; + } + + if (iMin == 60) + { + iMin = 0; + iDeg += 1; + } + + if (iMin == 0 && secs < SecondOfArcDecimalPlaces) + return $"{iDeg}°{axisSuffix}"; + + if (secs < SecondOfArcDecimalPlaces) + return $"{iDeg}°{iMin:00}'{axisSuffix}"; + + dp = GetDecimalPlaces(secs, 4); + var fmt = dp == 0 ? "00" : $"00.{new string('0', dp)}"; + return ($"{iDeg}°{iMin:00}'{secs.ToString(fmt)}\"{axisSuffix}"); + } + + /// + /// Determine number of decimal places required for without any trailing zeros + /// + /// + /// + /// Number of decimal places without any trailing zeros + private static int GetDecimalPlaces(double value, int maxPrecision) + { + if (maxPrecision <= 0) return 0; + + // eg 0.### + var fmt = "0." + new string('#', maxPrecision); + + // implicit rounding away from zero??? + var strValue = value.ToString(fmt); + + return strValue.Contains('.') ? strValue.Reverse().TakeWhile(c => c !='.').Count() : 0; + } + + } +} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 86137587..7a85af0d 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -214,6 +214,7 @@ True Settings.settings + From bb7aedd28bc981fabb52f3f256ddabed244af595 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 7 Sep 2019 14:57:31 +0700 Subject: [PATCH 102/186] Unit Test labelling of degree-min-sec --- .../Decoration/Graticule/GraticuleTest.cs | 109 ++++-------------- 1 file changed, 22 insertions(+), 87 deletions(-) diff --git a/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs index a9dce061..acc7ff03 100644 --- a/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs +++ b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs @@ -3,6 +3,7 @@ using System.Drawing.Imaging; using System.IO; using System.Linq; +using System.Reflection; using GeoAPI.CoordinateSystems; using GeoAPI.Geometries; using NUnit.Framework; @@ -156,8 +157,8 @@ public void TestGraticuleInd75Utm47N(double scale, float mapRotationDeg) private void SaveMap(Map map, bool isGeographic) { - var x = GetFormattedLabel(isGeographic, map.Center.X, AxisOrientationEnum.East).Replace(",",""); - var y = GetFormattedLabel(isGeographic, map.Center.Y, AxisOrientationEnum.North).Replace(",",""); + var x = map.Center.X.ToString("N0");//GetFormattedLabel(isGeographic, map.Center.X, AxisOrientationEnum.East).Replace(",",""); + var y = map.Center.Y.ToString("N0");//GetFormattedLabel(isGeographic, map.Center.Y, AxisOrientationEnum.North).Replace(",",""); var s = map.MapScale.ToString("00000.###").Replace(".", "-"); var fn = $"Graticule SRID {map.SRID} Scale {s} Center {x} {y} Rotn {map.MapTransformRotation:N0}.png"; using (var img = map.GetMap(96)) @@ -257,18 +258,29 @@ private ILayer GetBruTileLayer() } - [Ignore ("Time consuming test that has already been validated")] - [TestCase(7, AxisOrientationEnum.North )] - public void TestDmsLabel(double degree, AxisOrientationEnum axis) + [TestCase(7.0, 8.0, 0.00000001, AxisOrientationEnum.North )] + public void TestDmsLabel( double fromVal, double toVal, double increment, AxisOrientationEnum axis) { + // ok ok - testing private method suggests this method should be public and somewhere else + // I think NTS would be good place, but at time of writing NTS was going through major version + // upgrade, so have left this as is for next significant release of SharpMap + + var tolerance = 1.1E-8; + char[] split = {'°', '\'', '"', 'N', 'S', 'E', 'W'}; - var until = Math.Truncate(degree + 1); + Type type = typeof (SharpMap.Rendering.Decoration.Graticule.Graticule); + BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Instance; + MethodInfo method = type.GetMethod("GetFormattedLabel", bindingAttr); + var gratitule = Activator.CreateInstance(type); + + var thisVal = fromVal; do { - var dms = GetFormattedLabel(true, degree, axis); + var dms = (string)method.Invoke(gratitule, new object [] {true, thisVal, axis}); + //var dms = GetFormattedLabel(true, degree, axis); var tokens = dms.Split(split, StringSplitOptions.RemoveEmptyEntries); var dec = double.Parse(tokens[0]); if (tokens.Length >= 3) @@ -276,87 +288,10 @@ public void TestDmsLabel(double degree, AxisOrientationEnum axis) if (tokens.Length >= 2) dec += double.Parse(tokens[1]) / 60; - Assert.AreEqual(degree, dec, 2.8E-8d, $"{degree:N8} {dms} {dec:N8}"); - - degree += 0.00000001; - } while (degree < until); - - - } - - private string GetFormattedLabel(bool isGeographicCoordinateSystem, double value, AxisOrientationEnum axis) - { - var axisSuffix = string.Empty; - switch (axis) - { - case AxisOrientationEnum.North: - axisSuffix = value >= 0 ? "N" : "S"; - break; - - case AxisOrientationEnum.East: - axisSuffix = value >= 0 ? "E" : "W"; - break; - } - - int dp; - - if (!isGeographicCoordinateSystem) - { - dp = GetDecimalPlaces(value, 3); - return Math.Abs(value).ToString($"N{dp}") + "m" + axisSuffix; - } - - // DMS: 8dp approx = 1mm (= 1" arc to 4dp) - var deg = Math.Round(Math.Abs(value), 8, MidpointRounding.AwayFromZero); - var iDeg = (int) (deg); // equiv to Math.Truncate - var dec = deg - iDeg; - - var mins = dec * 60; - var iMin = (int) (mins); // equiv to Math.Truncate - - var secs = Math.Round(deg * 3600 - (iDeg * 3600) - (iMin * 60), 4, MidpointRounding.AwayFromZero); - - if (Math.Abs(secs - 60) < SecondOfArcDecimalPlaces) - { - secs = 0; - iMin += 1; - } - - if (iMin == 60) - { - iMin = 0; - iDeg += 1; - } - - if (iMin == 0 && secs < SecondOfArcDecimalPlaces) - return $"{iDeg}°{axisSuffix}"; - - if (secs < SecondOfArcDecimalPlaces) - return $"{iDeg}°{iMin:00}'{axisSuffix}"; - - dp = GetDecimalPlaces(secs, 4); - var fmt = dp == 0 ? "00" : $"00.{new string('0', dp)}"; - return ($"{iDeg}°{iMin:00}'{secs.ToString(fmt)}\"{axisSuffix}"); - } - - /// - /// Determine number of decimal places required for without any trailing zeros - /// - /// - /// - /// Number of decimal places without any trailing zeros - private static int GetDecimalPlaces(double value, int maxPrecision) - { - if (maxPrecision <= 0) return 0; - - // eg 0.### - var fmt = "0." + new string('#', maxPrecision); - - // implicit rounding away from zero??? - var strValue = value.ToString(fmt); + Assert.AreEqual(Math.Round(thisVal,8), Math.Round(dec, 8), tolerance, $"{thisVal:N8} {dms} {dec:N8}"); - return strValue.Contains('.') ? strValue.Reverse().TakeWhile(c => c !='.').Count() : 0; + thisVal += increment; + } while (thisVal < toVal); } - } } From a50f1143853847adaed11ec330e3730d14fde2d9 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sat, 7 Sep 2019 20:00:33 +0700 Subject: [PATCH 103/186] Exclude Map Graticule tests on Linux --- UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs index acc7ff03..08c7bf78 100644 --- a/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs +++ b/UnitTests/Rendering/Decoration/Graticule/GraticuleTest.cs @@ -17,7 +17,7 @@ namespace UnitTests.Rendering.Decoration.Graticule { - [TestFixture] + [TestFixture, Category("RequiresWindows")] public class GraticuleTest { private const double SecondOfArcDecimalPlaces = 1e-4; // approx. 1mm at the equator From 4977f04db16b2a9572ae5a63a177e9ccb869f6a5 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 8 Sep 2019 22:11:18 +0700 Subject: [PATCH 104/186] Replace SqlServer dependencies with package Microsoft.SqlServer.Types Introduce static constructors to load SqlServer native types at runtime --- .../SqlGeographyConverter.cs | 6 + .../SqlGeometryConverter.cs | 772 +++++++++--------- .../Data/Providers/SqlServer2008Ex.cs | 711 ++++++++-------- .../Geometries/SpatialOperationsEx.cs | 405 ++++----- .../Geometries/SpatialRelationsEx.cs | 701 ++++++++-------- SharpMap.SqlServerSpatialObjects/ReadMe.txt | 95 ++- .../SharpMap.SqlServerSpatialObjects.csproj | 215 ++--- .../packages.config | 21 +- 8 files changed, 1508 insertions(+), 1418 deletions(-) diff --git a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs index f2de39a0..f1d19a29 100644 --- a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs +++ b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeographyConverter.cs @@ -4,6 +4,7 @@ using System.Runtime.Serialization; using GeoAPI.Geometries; using Microsoft.SqlServer.Types; +using SharpMap.Data.Providers; using SMGeometry = GeoAPI.Geometries.IGeometry; using SMGeometryType = GeoAPI.Geometries.OgcGeometryType; using SMPoint = GeoAPI.Geometries.IPoint; @@ -67,6 +68,11 @@ public static class SqlGeographyConverter // sys.spatial_reference_systems table corresponding to the SRID in which the instance is defined public static double ReduceTolerance = 1d; + static SqlGeographyConverter() + { + SqlServer2008Ex.LoadSqlServerTypes(); + } + public static SqlGeography ToSqlGeography(SMGeometry smGeometry) { SqlGeographyBuilder builder = new SqlGeographyBuilder(); diff --git a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs index dbafcb9d..81c0de7a 100644 --- a/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs +++ b/SharpMap.SqlServerSpatialObjects/Converters/SqlServer2008SpatialObjects/SqlGeometryConverter.cs @@ -1,383 +1,389 @@ -#region License - -/* - * The attached / following is part of SharpMap.SqlServerSpatialObjects. - * - * SharpMap.SqlServerSpatialObjects is free software © 2010 Ingenieurgruppe IVV GmbH & Co. KG, - * www.ivv-aachen.de; you can redistribute it and/or modify it under the terms - * of the current GNU Lesser General Public License (LGPL) as published by and - * available from the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA: http://fsf.org/. - * This program is distributed without any warranty; - * without even the implied warranty of merchantability or fitness for purpose. - * See the GNU Lesser General Public License for the full details. - * - * Author: Felix Obermaier 2010 - * - */ - -#endregion -using System; -using System.Linq; -using System.Collections.Generic; -using System.Runtime.Serialization; -using GeoAPI.Geometries; -using Microsoft.SqlServer.Types; -using SMGeometry = GeoAPI.Geometries.IGeometry; -using SMGeometryType = GeoAPI.Geometries.OgcGeometryType; -using SMPoint = GeoAPI.Geometries.IPoint; -using SMLineString = GeoAPI.Geometries.ILineString; -using SMLinearRing = GeoAPI.Geometries.ILinearRing; -using SMPolygon = GeoAPI.Geometries.IPolygon; -using SMMultiPoint = GeoAPI.Geometries.IMultiPoint; -using SMMultiLineString = GeoAPI.Geometries.IMultiLineString; -using SMMultiPolygon = GeoAPI.Geometries.IMultiPolygon; -using SMGeometryCollection = GeoAPI.Geometries.IGeometryCollection; -using Factory = GeoAPI.Geometries.IGeometryFactory; - -namespace SharpMap.Converters.SqlServer2008SpatialObjects -{ - [Serializable] - public class SqlGeometryConverterException : Exception - { - /// - /// The geometry to convert - /// - public readonly SMGeometry Geometry; - - public SqlGeometryConverterException() - {} - - public SqlGeometryConverterException(SMGeometry geometry) - :this("Failed to convert SharpMapGeometry", geometry) - { - Geometry = geometry; - } - - public SqlGeometryConverterException(Exception inner, SMGeometry geometry) - : this("Failed to convert SharpMapGeometry", inner, geometry) - { - } - - public SqlGeometryConverterException(string message, SMGeometry geometry) - : base(message) - { - Geometry = geometry; - } - - public SqlGeometryConverterException(string message, Exception inner, SMGeometry geometry) - : base(message, inner) - { - Geometry = geometry; - } - - protected SqlGeometryConverterException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - //Geometry = (SMGeometry) info.GetValue("geom", typeof (SMGeometry)); - } - - } - - public static class SqlGeometryConverter - { - private static readonly GeoAPI.IGeometryServices Services = GeoAPI.GeometryServiceProvider.Instance; - - public static double ReduceTolerance = 1d; - - public static SqlGeometry ToSqlGeometry(SMGeometry smGeometry) - { - SqlGeometryBuilder builder = new SqlGeometryBuilder(); - builder.SetSrid(smGeometry.SRID); - - SharpMapGeometryToSqlGeometry(builder, smGeometry); - - SqlGeometry g = builder.ConstructedGeometry; - if (!g.STIsValid()) - { - try - { - g = g.Reduce(ReduceTolerance); - g = g.MakeValid(); - } - catch (Exception ex) - { - throw new SqlGeometryConverterException(ex, smGeometry); - } - } - - if (!g.STIsValid()) - throw new SqlGeometryConverterException(smGeometry); - - return g; - } - - public static IEnumerable ToSqlGeometries(IEnumerable smGeometries) - { - foreach (SMGeometry smGeometry in smGeometries) - yield return ToSqlGeometry(smGeometry); - } - - private static void SharpMapGeometryToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometry smGeometry) - { - - switch (smGeometry.OgcGeometryType) - { - case SMGeometryType.Point: - SharpMapPointToSqlGeometry(geomBuilder, smGeometry as SMPoint); - break; - case SMGeometryType.LineString: - SharpMapLineStringToSqlGeometry(geomBuilder, smGeometry as SMLineString); - break; - case SMGeometryType.Polygon: - SharpMapPolygonToSqlGeometry(geomBuilder, smGeometry as SMPolygon); - break; - case SMGeometryType.MultiPoint: - SharpMapMultiPointToSqlGeometry(geomBuilder, smGeometry as SMMultiPoint); - break; - case SMGeometryType.MultiLineString: - SharpMapMultiLineStringToSqlGeometry(geomBuilder, smGeometry as SMMultiLineString); - break; - case SMGeometryType.MultiPolygon: - SharpMapMultiPolygonToSqlGeometry(geomBuilder, smGeometry as SMMultiPolygon); - break; - case SMGeometryType.GeometryCollection: - SharpMapGeometryCollectionToSqlGeometry(geomBuilder, smGeometry as SMGeometryCollection); - break; - default: - throw new ArgumentException( - String.Format("Cannot convert '{0}' geometry type", smGeometry.GeometryType), "smGeometry"); - } - } - - private static void SharpMapGeometryCollectionToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometryCollection geometryCollection) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.GeometryCollection); - for (int i = 0; i < geometryCollection.NumGeometries; i++ ) - SharpMapGeometryToSqlGeometry(geomBuilder, geometryCollection[i]); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPolygon multiPolygon) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPolygon); - for (int i = 0; i < multiPolygon.NumGeometries; i++) - SharpMapPolygonToSqlGeometry(geomBuilder, multiPolygon[i] as SMPolygon); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiLineString multiLineString) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiLineString); - for (int i = 0; i < multiLineString.NumGeometries; i++) - SharpMapLineStringToSqlGeometry(geomBuilder, multiLineString[i] as SMLineString); - geomBuilder.EndGeometry(); - } - - private static void SharpMapMultiPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPoint multiPoint) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPoint); - for(int i = 0; i < multiPoint.NumPoints; i++) - SharpMapPointToSqlGeometry(geomBuilder, multiPoint[i] as SMPoint); - geomBuilder.EndGeometry(); - } - - private static void SharpMapPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPoint point) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.Point); - geomBuilder.BeginFigure(point.X, point.Y); - geomBuilder.EndFigure(); - geomBuilder.EndGeometry(); - } - - private static void SharpMapLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMLineString lineString) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.LineString); - var coords = lineString.Coordinates; - geomBuilder.BeginFigure(coords[0].X, coords[0].Y); - for (int i = 1; i < lineString.NumPoints; i++) - { - var point = coords[i]; - geomBuilder.AddLine(point.X, point.Y); - } - geomBuilder.EndFigure(); - geomBuilder.EndGeometry(); - } - - private static void SharpMapPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPolygon polygon) - { - geomBuilder.BeginGeometry(OpenGisGeometryType.Polygon); - AddRing(geomBuilder, (SMLinearRing )polygon.ExteriorRing); - for (int i = 0; i < polygon.NumInteriorRings; i++) - AddRing(geomBuilder, (SMLinearRing )polygon.GetInteriorRingN(i)); - geomBuilder.EndGeometry(); - } - - private static void AddRing(SqlGeometryBuilder builder, SMLinearRing linearRing) - { - if (linearRing.NumPoints < 3) - return; - - //if (linearRing.Area == 0) - // return; - - var coords = linearRing.Coordinates; - builder.BeginFigure(coords[0].X, coords[0].Y); - for (var i = 1; i < linearRing.NumPoints; i++) - { - var pt = coords[i]; - builder.AddLine(pt.X, pt.Y); - } - builder.EndFigure(); - } - - public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry) - { - return ToSharpMapGeometry(geometry, null); - } - public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry, Factory factory) - { - if (geometry == null) return null; - if (geometry.IsNull) return null; - - var fact = factory ?? Services.CreateGeometryFactory((int) geometry.STSrid); - - if (geometry.STIsEmpty()) - return fact.CreateGeometryCollection(null); - - if (!geometry.STIsValid()) - geometry = geometry.MakeValid(); - - OpenGisGeometryType geometryType = (OpenGisGeometryType)Enum.Parse(typeof(OpenGisGeometryType), (string)geometry.STGeometryType()); - switch (geometryType) - { - case OpenGisGeometryType.Point: - return SqlGeometryToSharpMapPoint(geometry, fact); - case OpenGisGeometryType.LineString: - return SqlGeometryToSharpMapLineString(geometry, fact); - case OpenGisGeometryType.Polygon: - return SqlGeometryToSharpMapPolygon(geometry, fact); - case OpenGisGeometryType.MultiPoint: - return SqlGeometryToSharpMapMultiPoint(geometry, fact); - case OpenGisGeometryType.MultiLineString: - return SqlGeometryToSharpMapMultiLineString(geometry, fact); - case OpenGisGeometryType.MultiPolygon: - return SqlGeometryToSharpMapMultiPolygon(geometry, fact); - case OpenGisGeometryType.GeometryCollection: - return SqlGeometryToSharpMapGeometryCollection(geometry, fact); - } - throw new ArgumentException(string.Format("Cannot convert SqlServer '{0}' to Sharpmap.Geometry", geometry.STGeometryType()), "geometry"); - } - - public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeometries) - { - return ToSharpMapGeometries(sqlGeometries,null); - } - - public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeometries, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)sqlGeometries.First().STSrid); - - foreach (var sqlGeometry in sqlGeometries) - yield return ToSharpMapGeometry(sqlGeometry, fact); - } - - /* - private static OpenGisGeometryType ParseGeometryType(string stGeometryType) - { - switch (stGeometryType.ToUpper()) - { - case "POINT": - return OpenGisGeometryType.Point; - case "LINESTRING": - return OpenGisGeometryType.LineString; - case "POLYGON": - return OpenGisGeometryType.Polygon; - case "MULTIPOINT": - return OpenGisGeometryType.MultiPoint; - case "MULTILINESTRING": - return OpenGisGeometryType.MultiLineString; - case "MULTIPOLYGON": - return OpenGisGeometryType.MultiPolygon; - case "GEOMETRYCOLLECTION": - return OpenGisGeometryType.GeometryCollection; - } - throw new ArgumentException(String.Format("Invalid geometrytype '{0}'!", stGeometryType), "stGeometryType"); - } - */ - - private static SMGeometryCollection SqlGeometryToSharpMapGeometryCollection(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - var geoms = new SMGeometry[(int)geometry.STNumGeometries()]; - for (var i = 1; i <= geometry.STNumGeometries(); i++) - geoms[i-1] = ToSharpMapGeometry(geometry.STGeometryN(i), fact); - return fact.CreateGeometryCollection(geoms); - } - - private static SMMultiPolygon SqlGeometryToSharpMapMultiPolygon(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - var polygons = new SMPolygon[(int)geometry.STNumGeometries()]; - for (var i = 1; i <= geometry.STNumGeometries(); i++) - polygons[i-1] = (SMPolygon)SqlGeometryToSharpMapPolygon(geometry.STGeometryN(i), fact); - return fact.CreateMultiPolygon(polygons); - } - - private static SMMultiLineString SqlGeometryToSharpMapMultiLineString(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - var lineStrings = new SMLineString[(int)geometry.STNumGeometries()]; - for (var i = 1; i <= geometry.STNumGeometries(); i++) - lineStrings[i-1] = (SMLineString)SqlGeometryToSharpMapLineString(geometry.STGeometryN(i), fact); - return fact.CreateMultiLineString(lineStrings); - } - - private static SMGeometry SqlGeometryToSharpMapMultiPoint(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - var points = new SMPoint[(int)geometry.STNumGeometries()]; - for (var i = 1; i <= geometry.STNumGeometries(); i++) - points[i-1] = (SMPoint) SqlGeometryToSharpMapPoint(geometry.STGeometryN(i), fact); - return fact.CreateMultiPoint(points); - } - - private static SMGeometry SqlGeometryToSharpMapPoint(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - return fact.CreatePoint(new Coordinate( (double)geometry.STX, (double)geometry.STY)); - } - - private static Coordinate[] GetPoints(SqlGeometry geometry) - { - var pts = new Coordinate[(int)geometry.STNumPoints()]; - for (int i = 1; i <= (int)geometry.STNumPoints(); i++) - { - var ptGeometry = geometry.STPointN(i); - pts[i-1] = new Coordinate((double)ptGeometry.STX, (double)ptGeometry.STY); - } - return pts; - } - - private static SMGeometry SqlGeometryToSharpMapLineString(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - return fact.CreateLineString(GetPoints(geometry)); - } - - private static SMGeometry SqlGeometryToSharpMapPolygon(SqlGeometry geometry, Factory factory) - { - var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); - //exterior ring - var exterior = fact.CreateLinearRing(GetPoints(geometry.STExteriorRing())); - SMLinearRing[] interior = null; - if (geometry.STNumInteriorRing()>0) - { - interior = new SMLinearRing[(int)geometry.STNumInteriorRing()]; - for (var i = 1; i <= geometry.STNumInteriorRing(); i++) - interior[i - 1] = fact.CreateLinearRing(GetPoints(geometry.STInteriorRingN(i))); - } - return Services.CreateGeometryFactory((int)geometry.STSrid).CreatePolygon(exterior, interior); - } - } -} +#region License + +/* + * The attached / following is part of SharpMap.SqlServerSpatialObjects. + * + * SharpMap.SqlServerSpatialObjects is free software � 2010 Ingenieurgruppe IVV GmbH & Co. KG, + * www.ivv-aachen.de; you can redistribute it and/or modify it under the terms + * of the current GNU Lesser General Public License (LGPL) as published by and + * available from the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA: http://fsf.org/. + * This program is distributed without any warranty; + * without even the implied warranty of merchantability or fitness for purpose. + * See the GNU Lesser General Public License for the full details. + * + * Author: Felix Obermaier 2010 + * + */ + +#endregion +using System; +using System.Linq; +using System.Collections.Generic; +using System.Runtime.Serialization; +using GeoAPI.Geometries; +using Microsoft.SqlServer.Types; +using SharpMap.Data.Providers; +using SMGeometry = GeoAPI.Geometries.IGeometry; +using SMGeometryType = GeoAPI.Geometries.OgcGeometryType; +using SMPoint = GeoAPI.Geometries.IPoint; +using SMLineString = GeoAPI.Geometries.ILineString; +using SMLinearRing = GeoAPI.Geometries.ILinearRing; +using SMPolygon = GeoAPI.Geometries.IPolygon; +using SMMultiPoint = GeoAPI.Geometries.IMultiPoint; +using SMMultiLineString = GeoAPI.Geometries.IMultiLineString; +using SMMultiPolygon = GeoAPI.Geometries.IMultiPolygon; +using SMGeometryCollection = GeoAPI.Geometries.IGeometryCollection; +using Factory = GeoAPI.Geometries.IGeometryFactory; + +namespace SharpMap.Converters.SqlServer2008SpatialObjects +{ + [Serializable] + public class SqlGeometryConverterException : Exception + { + /// + /// The geometry to convert + /// + public readonly SMGeometry Geometry; + + public SqlGeometryConverterException() + {} + + public SqlGeometryConverterException(SMGeometry geometry) + :this("Failed to convert SharpMapGeometry", geometry) + { + Geometry = geometry; + } + + public SqlGeometryConverterException(Exception inner, SMGeometry geometry) + : this("Failed to convert SharpMapGeometry", inner, geometry) + { + } + + public SqlGeometryConverterException(string message, SMGeometry geometry) + : base(message) + { + Geometry = geometry; + } + + public SqlGeometryConverterException(string message, Exception inner, SMGeometry geometry) + : base(message, inner) + { + Geometry = geometry; + } + + protected SqlGeometryConverterException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + //Geometry = (SMGeometry) info.GetValue("geom", typeof (SMGeometry)); + } + + } + + public static class SqlGeometryConverter + { + private static readonly GeoAPI.IGeometryServices Services = GeoAPI.GeometryServiceProvider.Instance; + + public static double ReduceTolerance = 1d; + + static SqlGeometryConverter() + { + SqlServer2008Ex.LoadSqlServerTypes(); + } + + public static SqlGeometry ToSqlGeometry(SMGeometry smGeometry) + { + SqlGeometryBuilder builder = new SqlGeometryBuilder(); + builder.SetSrid(smGeometry.SRID); + + SharpMapGeometryToSqlGeometry(builder, smGeometry); + + SqlGeometry g = builder.ConstructedGeometry; + if (!g.STIsValid()) + { + try + { + g = g.Reduce(ReduceTolerance); + g = g.MakeValid(); + } + catch (Exception ex) + { + throw new SqlGeometryConverterException(ex, smGeometry); + } + } + + if (!g.STIsValid()) + throw new SqlGeometryConverterException(smGeometry); + + return g; + } + + public static IEnumerable ToSqlGeometries(IEnumerable smGeometries) + { + foreach (SMGeometry smGeometry in smGeometries) + yield return ToSqlGeometry(smGeometry); + } + + private static void SharpMapGeometryToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometry smGeometry) + { + + switch (smGeometry.OgcGeometryType) + { + case SMGeometryType.Point: + SharpMapPointToSqlGeometry(geomBuilder, smGeometry as SMPoint); + break; + case SMGeometryType.LineString: + SharpMapLineStringToSqlGeometry(geomBuilder, smGeometry as SMLineString); + break; + case SMGeometryType.Polygon: + SharpMapPolygonToSqlGeometry(geomBuilder, smGeometry as SMPolygon); + break; + case SMGeometryType.MultiPoint: + SharpMapMultiPointToSqlGeometry(geomBuilder, smGeometry as SMMultiPoint); + break; + case SMGeometryType.MultiLineString: + SharpMapMultiLineStringToSqlGeometry(geomBuilder, smGeometry as SMMultiLineString); + break; + case SMGeometryType.MultiPolygon: + SharpMapMultiPolygonToSqlGeometry(geomBuilder, smGeometry as SMMultiPolygon); + break; + case SMGeometryType.GeometryCollection: + SharpMapGeometryCollectionToSqlGeometry(geomBuilder, smGeometry as SMGeometryCollection); + break; + default: + throw new ArgumentException( + String.Format("Cannot convert '{0}' geometry type", smGeometry.GeometryType), "smGeometry"); + } + } + + private static void SharpMapGeometryCollectionToSqlGeometry(SqlGeometryBuilder geomBuilder, SMGeometryCollection geometryCollection) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.GeometryCollection); + for (int i = 0; i < geometryCollection.NumGeometries; i++ ) + SharpMapGeometryToSqlGeometry(geomBuilder, geometryCollection[i]); + geomBuilder.EndGeometry(); + } + + private static void SharpMapMultiPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPolygon multiPolygon) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPolygon); + for (int i = 0; i < multiPolygon.NumGeometries; i++) + SharpMapPolygonToSqlGeometry(geomBuilder, multiPolygon[i] as SMPolygon); + geomBuilder.EndGeometry(); + } + + private static void SharpMapMultiLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiLineString multiLineString) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.MultiLineString); + for (int i = 0; i < multiLineString.NumGeometries; i++) + SharpMapLineStringToSqlGeometry(geomBuilder, multiLineString[i] as SMLineString); + geomBuilder.EndGeometry(); + } + + private static void SharpMapMultiPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPoint multiPoint) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPoint); + for(int i = 0; i < multiPoint.NumPoints; i++) + SharpMapPointToSqlGeometry(geomBuilder, multiPoint[i] as SMPoint); + geomBuilder.EndGeometry(); + } + + private static void SharpMapPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPoint point) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.Point); + geomBuilder.BeginFigure(point.X, point.Y); + geomBuilder.EndFigure(); + geomBuilder.EndGeometry(); + } + + private static void SharpMapLineStringToSqlGeometry(SqlGeometryBuilder geomBuilder, SMLineString lineString) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.LineString); + var coords = lineString.Coordinates; + geomBuilder.BeginFigure(coords[0].X, coords[0].Y); + for (int i = 1; i < lineString.NumPoints; i++) + { + var point = coords[i]; + geomBuilder.AddLine(point.X, point.Y); + } + geomBuilder.EndFigure(); + geomBuilder.EndGeometry(); + } + + private static void SharpMapPolygonToSqlGeometry(SqlGeometryBuilder geomBuilder, SMPolygon polygon) + { + geomBuilder.BeginGeometry(OpenGisGeometryType.Polygon); + AddRing(geomBuilder, (SMLinearRing )polygon.ExteriorRing); + for (int i = 0; i < polygon.NumInteriorRings; i++) + AddRing(geomBuilder, (SMLinearRing )polygon.GetInteriorRingN(i)); + geomBuilder.EndGeometry(); + } + + private static void AddRing(SqlGeometryBuilder builder, SMLinearRing linearRing) + { + if (linearRing.NumPoints < 3) + return; + + //if (linearRing.Area == 0) + // return; + + var coords = linearRing.Coordinates; + builder.BeginFigure(coords[0].X, coords[0].Y); + for (var i = 1; i < linearRing.NumPoints; i++) + { + var pt = coords[i]; + builder.AddLine(pt.X, pt.Y); + } + builder.EndFigure(); + } + + public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry) + { + return ToSharpMapGeometry(geometry, null); + } + public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry, Factory factory) + { + if (geometry == null) return null; + if (geometry.IsNull) return null; + + var fact = factory ?? Services.CreateGeometryFactory((int) geometry.STSrid); + + if (geometry.STIsEmpty()) + return fact.CreateGeometryCollection(null); + + if (!geometry.STIsValid()) + geometry = geometry.MakeValid(); + + OpenGisGeometryType geometryType = (OpenGisGeometryType)Enum.Parse(typeof(OpenGisGeometryType), (string)geometry.STGeometryType()); + switch (geometryType) + { + case OpenGisGeometryType.Point: + return SqlGeometryToSharpMapPoint(geometry, fact); + case OpenGisGeometryType.LineString: + return SqlGeometryToSharpMapLineString(geometry, fact); + case OpenGisGeometryType.Polygon: + return SqlGeometryToSharpMapPolygon(geometry, fact); + case OpenGisGeometryType.MultiPoint: + return SqlGeometryToSharpMapMultiPoint(geometry, fact); + case OpenGisGeometryType.MultiLineString: + return SqlGeometryToSharpMapMultiLineString(geometry, fact); + case OpenGisGeometryType.MultiPolygon: + return SqlGeometryToSharpMapMultiPolygon(geometry, fact); + case OpenGisGeometryType.GeometryCollection: + return SqlGeometryToSharpMapGeometryCollection(geometry, fact); + } + throw new ArgumentException(string.Format("Cannot convert SqlServer '{0}' to Sharpmap.Geometry", geometry.STGeometryType()), "geometry"); + } + + public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeometries) + { + return ToSharpMapGeometries(sqlGeometries,null); + } + + public static IEnumerable ToSharpMapGeometries(IEnumerable sqlGeometries, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)sqlGeometries.First().STSrid); + + foreach (var sqlGeometry in sqlGeometries) + yield return ToSharpMapGeometry(sqlGeometry, fact); + } + + /* + private static OpenGisGeometryType ParseGeometryType(string stGeometryType) + { + switch (stGeometryType.ToUpper()) + { + case "POINT": + return OpenGisGeometryType.Point; + case "LINESTRING": + return OpenGisGeometryType.LineString; + case "POLYGON": + return OpenGisGeometryType.Polygon; + case "MULTIPOINT": + return OpenGisGeometryType.MultiPoint; + case "MULTILINESTRING": + return OpenGisGeometryType.MultiLineString; + case "MULTIPOLYGON": + return OpenGisGeometryType.MultiPolygon; + case "GEOMETRYCOLLECTION": + return OpenGisGeometryType.GeometryCollection; + } + throw new ArgumentException(String.Format("Invalid geometrytype '{0}'!", stGeometryType), "stGeometryType"); + } + */ + + private static SMGeometryCollection SqlGeometryToSharpMapGeometryCollection(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + var geoms = new SMGeometry[(int)geometry.STNumGeometries()]; + for (var i = 1; i <= geometry.STNumGeometries(); i++) + geoms[i-1] = ToSharpMapGeometry(geometry.STGeometryN(i), fact); + return fact.CreateGeometryCollection(geoms); + } + + private static SMMultiPolygon SqlGeometryToSharpMapMultiPolygon(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + var polygons = new SMPolygon[(int)geometry.STNumGeometries()]; + for (var i = 1; i <= geometry.STNumGeometries(); i++) + polygons[i-1] = (SMPolygon)SqlGeometryToSharpMapPolygon(geometry.STGeometryN(i), fact); + return fact.CreateMultiPolygon(polygons); + } + + private static SMMultiLineString SqlGeometryToSharpMapMultiLineString(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + var lineStrings = new SMLineString[(int)geometry.STNumGeometries()]; + for (var i = 1; i <= geometry.STNumGeometries(); i++) + lineStrings[i-1] = (SMLineString)SqlGeometryToSharpMapLineString(geometry.STGeometryN(i), fact); + return fact.CreateMultiLineString(lineStrings); + } + + private static SMGeometry SqlGeometryToSharpMapMultiPoint(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + var points = new SMPoint[(int)geometry.STNumGeometries()]; + for (var i = 1; i <= geometry.STNumGeometries(); i++) + points[i-1] = (SMPoint) SqlGeometryToSharpMapPoint(geometry.STGeometryN(i), fact); + return fact.CreateMultiPoint(points); + } + + private static SMGeometry SqlGeometryToSharpMapPoint(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + return fact.CreatePoint(new Coordinate( (double)geometry.STX, (double)geometry.STY)); + } + + private static Coordinate[] GetPoints(SqlGeometry geometry) + { + var pts = new Coordinate[(int)geometry.STNumPoints()]; + for (int i = 1; i <= (int)geometry.STNumPoints(); i++) + { + var ptGeometry = geometry.STPointN(i); + pts[i-1] = new Coordinate((double)ptGeometry.STX, (double)ptGeometry.STY); + } + return pts; + } + + private static SMGeometry SqlGeometryToSharpMapLineString(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + return fact.CreateLineString(GetPoints(geometry)); + } + + private static SMGeometry SqlGeometryToSharpMapPolygon(SqlGeometry geometry, Factory factory) + { + var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid); + //exterior ring + var exterior = fact.CreateLinearRing(GetPoints(geometry.STExteriorRing())); + SMLinearRing[] interior = null; + if (geometry.STNumInteriorRing()>0) + { + interior = new SMLinearRing[(int)geometry.STNumInteriorRing()]; + for (var i = 1; i <= geometry.STNumInteriorRing(); i++) + interior[i - 1] = fact.CreateLinearRing(GetPoints(geometry.STInteriorRingN(i))); + } + return Services.CreateGeometryFactory((int)geometry.STSrid).CreatePolygon(exterior, interior); + } + } +} diff --git a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs index fe372fd0..792c071c 100644 --- a/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs +++ b/SharpMap.SqlServerSpatialObjects/Data/Providers/SqlServer2008Ex.cs @@ -1,341 +1,370 @@ -// Copyright 2008 - William Dollins, 2012 - Joris Wit -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using Common.Logging; -using GeoAPI.Geometries; -using SharpMap.Converters.SqlServer2008SpatialObjects; -using System; -using System.Collections.ObjectModel; -using System.Data.SqlClient; -using System.Globalization; -using System.Text; -using BoundingBox = GeoAPI.Geometries.Envelope; -using Geometry = GeoAPI.Geometries.IGeometry; - -namespace SharpMap.Data.Providers -{ - /// - /// SQL Server 2008 data provider - /// - /// - /// This is a modified version of the provider. It might provide better performance - /// because it directly uses the SQL server spatial types, instead of using the STAsBinary method. - /// - /// Adding a datasource to a layer: - /// - /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); - /// string ConnStr = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=myDB;Data Source=myServer\myInstance"; - /// myLayer.DataSource = new Data.Providers.SqlServer2008Ex(ConnStr, "myTable", "GeomColumn", "OidColumn"); - /// - /// - /// - [Serializable] - public class SqlServer2008Ex : SqlServer2008 - { - static readonly ILog _logger = LogManager.GetLogger(typeof(SqlServer2008Ex)); - - /// - /// Always true. Both queries and client-side conversion will always attempt to repair invalid spatial objects - /// - public override bool ValidateGeometries - { - get => true; - set - { - if (value != true) - throw new ArgumentOutOfRangeException("SqlServer2008Ex converters ALWAYS attempt to repair invalid spatial objects"); - } - } - - /// - /// Initializes a new connection to SQL Server for .Geometry with default - /// - /// Connectionstring - /// Name of data table - /// Name of geometry column - /// Name of column with unique identifier - [Obsolete] - public SqlServer2008Ex(string connectionStr, string tablename, string geometryColumnName, string oidColumnName) - : base(connectionStr, tablename, geometryColumnName, oidColumnName, SqlServerSpatialObjectType.Geometry) - { - } - - /// - /// Initializes a new connection to SQL Server with default - /// - /// Connectionstring - /// Name of data table - /// Name of spatial column - /// Name of column with unique identifier - /// spatial type (Geometry or Geography) - [Obsolete] - public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, - SqlServerSpatialObjectType spatialObjectType) - : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType) - { - } - - /// - /// Initializes a new connection to SQL Server - /// - /// Connectionstring - /// Name of data table - /// Name of spatial column - /// Name of column with unique identifier - /// spatial type (Geometry or Geography) - /// Spatial Reference ID - /// method for reading data extents. Geography does not support SqlServer2008ExtentsMode::SpatialIndex - public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, - SqlServerSpatialObjectType spatialObjectType, int srid, SqlServer2008ExtentsMode extentsMode) - : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, srid, extentsMode) - { - } - - /// - /// Returns geometries within the specified bounding box - /// - /// - /// - public override Collection GetGeometriesInView(BoundingBox bbox) - { - var features = new Collection(); - using (var conn = new SqlConnection(ConnectionString)) - { - var sb = new StringBuilder($"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + - $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - - if (!String.IsNullOrEmpty(DefinitionQuery)) - sb.Append($"{DefinitionQuery} AND "); - - if (!ValidateGeometries || - (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) - // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - - sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - - if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometriesInView {0}", sb.ToString()); - - using (var command = new SqlCommand(sb.ToString(), conn)) - { - conn.Open(); - using (SqlDataReader dr = command.ExecuteReader()) - { - while (dr.Read()) - { - if (dr[0] != null && dr[0] != DBNull.Value) - { - var geom = SqlBytesToGeometry(dr[0]); - if (geom != null) - features.Add(geom); - } - } - } - } - } - return features; - } - - /// - /// Returns the geometry corresponding to the Object ID - /// - /// Object ID - /// geometry - public override Geometry GetGeometryByID(uint oid) - { - Geometry geom = null; - using (var conn = new SqlConnection(ConnectionString)) - { - string strSql = $"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + - $"FROM {QualifiedTable} WHERE {ObjectIdColumn} = {oid}"; - - if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); - - using (var command = new SqlCommand(strSql, conn)) - { - conn.Open(); - using (SqlDataReader dr = command.ExecuteReader()) - { - while (dr.Read()) - { - if (dr[0] != null && dr[0] != DBNull.Value) - geom = SqlBytesToGeometry(dr[0]); - } - } - } - } - return geom; - } - - /// - /// Returns the features that intersects with 'geom' - /// - /// - /// FeatureDataSet to fill data into - protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet fds) - { - if (SpatialObjectType == SqlServerSpatialObjectType.Geography) - { - // Define Ring with Clockwise orientation, to be reoriented in query - var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { - GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), - GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), - GeogMaxExtents.BottomLeft()}); - geom = geom.Intersection(maxExentsPoly); - } - - var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + - $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - - if (!ValidateGeometries || - (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) - // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - - if (!String.IsNullOrEmpty(DefinitionQuery)) - sb.Append($"{DefinitionQuery} AND "); - - // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: - // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. - var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" - - sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); - - if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); - - ExecuteIntersectionQuery(sb.ToString(), fds); - } - - - - /// - /// Returns a datarow based on a RowID - /// - /// - /// datarow - public override FeatureDataRow GetFeature(uint rowId) - { - using (var conn = new SqlConnection(ConnectionString)) - { - var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + - $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; - - if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); - - using (var adapter = new SqlDataAdapter(strSql, conn)) - { - var ds = new System.Data.DataSet(); - conn.Open(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - if (ds.Tables[0].Rows.Count > 0) - { - System.Data.DataRow dr = ds.Tables[0].Rows[0]; - FeatureDataRow fdr = fdt.NewRow(); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdr[col.ColumnName] = dr[col]; - fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); - return fdr; - } - return null; - } - return null; - } - } - } - - /// - /// Returns all features with the view box - /// - /// view box - /// FeatureDataSet to fill data into - public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet fds) - { - var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + - $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); - - if (!String.IsNullOrEmpty(DefinitionQuery)) - sb.Append($"{DefinitionQuery} AND "); - - if (!ValidateGeometries || - (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) - // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr - sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); - - sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); - - if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); - - ExecuteIntersectionQuery(sb.ToString(), fds); - } - - /// - /// Select records from database and return FeatureDataSet with SharpMap geometries - /// - protected override void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) - { - using (var conn = new SqlConnection(ConnectionString)) - { - conn.Open(); - using (var adapter = new SqlDataAdapter(sql, conn)) - { - var ds = new System.Data.DataSet(); - adapter.Fill(ds); - conn.Close(); - if (ds.Tables.Count > 0) - { - var fdt = new FeatureDataTable(ds.Tables[0]); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); - - foreach (System.Data.DataRow dr in ds.Tables[0].Rows) - { - FeatureDataRow fdr = fdt.NewRow(); - foreach (System.Data.DataColumn col in ds.Tables[0].Columns) - if (col.ColumnName != GeometryColumn) - fdr[col.ColumnName] = dr[col]; - - fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); - fdt.AddRow(fdr); - } - fds.Tables.Add(fdt); - } - } - } - } - - private Geometry SqlBytesToGeometry(Object sqlBytes) - { - Geometry geom = null; - if (sqlBytes != null && sqlBytes != DBNull.Value) - if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) - geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)sqlBytes, Factory); - else - geom = SqlGeographyConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeography)sqlBytes, Factory); - return geom; - } - - } -} +// Copyright 2008 - William Dollins, 2012 - Joris Wit +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using Common.Logging; +using GeoAPI.Geometries; +using SharpMap.Converters.SqlServer2008SpatialObjects; +using System; +using System.Collections.ObjectModel; +using System.Data.SqlClient; +using System.Text; +using BoundingBox = GeoAPI.Geometries.Envelope; +using Geometry = GeoAPI.Geometries.IGeometry; + +namespace SharpMap.Data.Providers +{ + /// + /// SQL Server 2008 data provider + /// + /// + /// This is a modified version of the provider. It might provide better performance + /// because it directly uses the SQL server spatial types, instead of using the STAsBinary method. + /// + /// Adding a datasource to a layer: + /// + /// Layers.VectorLayer myLayer = new Layers.VectorLayer("My layer"); + /// string ConnStr = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=myDB;Data Source=myServer\myInstance"; + /// myLayer.DataSource = new Data.Providers.SqlServer2008Ex(ConnStr, "myTable", "GeomColumn", "OidColumn"); + /// + /// + /// + [Serializable] + public class SqlServer2008Ex : SqlServer2008 + { + static readonly ILog _logger = LogManager.GetLogger(typeof(SqlServer2008Ex)); + + private static bool _isSqlTypesLoaded; + private static readonly object _loadLock = new object(); + + /// + /// Ensure SqlServerTypes (x32 or x64) are loaded at runtime + /// + static SqlServer2008Ex() + { + if (!_isSqlTypesLoaded) + lock(_loadLock) + if (!_isSqlTypesLoaded) + { + try + { + SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + _isSqlTypesLoaded = true; + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + } + } + + /// + /// placeholder method to be called by related classes causing static ctor to load types + /// + public static void LoadSqlServerTypes() {} + + /// + /// Always true. Both queries and client-side conversion will always attempt to repair invalid spatial objects + /// + public override bool ValidateGeometries + { + get => true; + set + { + if (value != true) + throw new ArgumentOutOfRangeException("SqlServer2008Ex converters ALWAYS attempt to repair invalid spatial objects"); + } + } + + /// + /// Initializes a new connection to SQL Server for .Geometry with default + /// + /// Connectionstring + /// Name of data table + /// Name of geometry column + /// Name of column with unique identifier + [Obsolete] + public SqlServer2008Ex(string connectionStr, string tablename, string geometryColumnName, string oidColumnName) + : base(connectionStr, tablename, geometryColumnName, oidColumnName, SqlServerSpatialObjectType.Geometry) + { + } + + /// + /// Initializes a new connection to SQL Server with default + /// + /// Connectionstring + /// Name of data table + /// Name of spatial column + /// Name of column with unique identifier + /// spatial type (Geometry or Geography) + [Obsolete] + public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType) + : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType) + { + } + + /// + /// Initializes a new connection to SQL Server + /// + /// Connectionstring + /// Name of data table + /// Name of spatial column + /// Name of column with unique identifier + /// spatial type (Geometry or Geography) + /// Spatial Reference ID + /// method for reading data extents. Geography does not support SqlServer2008ExtentsMode::SpatialIndex + public SqlServer2008Ex(string connectionStr, string tablename, string spatialColumnName, string oidColumnName, + SqlServerSpatialObjectType spatialObjectType, int srid, SqlServer2008ExtentsMode extentsMode) + : base(connectionStr, tablename, spatialColumnName, oidColumnName, spatialObjectType, srid, extentsMode) + { + } + + /// + /// Returns geometries within the specified bounding box + /// + /// + /// + public override Collection GetGeometriesInView(BoundingBox bbox) + { + var features = new Collection(); + using (var conn = new SqlConnection(ConnectionString)) + { + var sb = new StringBuilder($"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); + + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometriesInView {0}", sb.ToString()); + + using (var command = new SqlCommand(sb.ToString(), conn)) + { + conn.Open(); + using (SqlDataReader dr = command.ExecuteReader()) + { + while (dr.Read()) + { + if (dr[0] != null && dr[0] != DBNull.Value) + { + var geom = SqlBytesToGeometry(dr[0]); + if (geom != null) + features.Add(geom); + } + } + } + } + } + return features; + } + + /// + /// Returns the geometry corresponding to the Object ID + /// + /// Object ID + /// geometry + public override Geometry GetGeometryByID(uint oid) + { + Geometry geom = null; + using (var conn = new SqlConnection(ConnectionString)) + { + string strSql = $"SELECT {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} WHERE {ObjectIdColumn} = {oid}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetGeometryByID {0}", strSql); + + using (var command = new SqlCommand(strSql, conn)) + { + conn.Open(); + using (SqlDataReader dr = command.ExecuteReader()) + { + while (dr.Read()) + { + if (dr[0] != null && dr[0] != DBNull.Value) + geom = SqlBytesToGeometry(dr[0]); + } + } + } + } + return geom; + } + + /// + /// Returns the features that intersects with 'geom' + /// + /// + /// FeatureDataSet to fill data into + protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet fds) + { + if (SpatialObjectType == SqlServerSpatialObjectType.Geography) + { + // Define Ring with Clockwise orientation, to be reoriented in query + var maxExentsPoly = Factory.CreatePolygon(new Coordinate[] { + GeogMaxExtents.BottomLeft(), GeogMaxExtents.TopLeft(), + GeogMaxExtents.TopRight(), GeogMaxExtents.BottomRight(), + GeogMaxExtents.BottomLeft()}); + geom = geom.Intersection(maxExentsPoly); + } + + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); + + // .MakeValid() in WHERE clause is not compatible certain BuildHints, resulting in error: + // The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN. + var makeValid = (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)) ? "" : GetMakeValidString(); //".MakeValid()" + + sb.Append($"{GeometryColumn}{makeValid}.STIntersects({_spatialTypeString}::STGeomFromText('{geom.AsText()}', {SRID}){_reorientObject})=1 {GetExtraOptions()}"); + + if (_logger.IsDebugEnabled) _logger.DebugFormat("OnExecuteIntersectionQuery {0}", sb.ToString()); + + ExecuteIntersectionQuery(sb.ToString(), fds); + } + + + + /// + /// Returns a datarow based on a RowID + /// + /// + /// datarow + public override FeatureDataRow GetFeature(uint rowId) + { + using (var conn = new SqlConnection(ConnectionString)) + { + var strSql = $"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} WHERE {ObjectIdColumn}={rowId}"; + + if (_logger.IsDebugEnabled) _logger.DebugFormat("GetFeature {0}", strSql); + + using (var adapter = new SqlDataAdapter(strSql, conn)) + { + var ds = new System.Data.DataSet(); + conn.Open(); + adapter.Fill(ds); + conn.Close(); + if (ds.Tables.Count > 0) + { + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) + if (col.ColumnName != GeometryColumn) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + if (ds.Tables[0].Rows.Count > 0) + { + System.Data.DataRow dr = ds.Tables[0].Rows[0]; + FeatureDataRow fdr = fdt.NewRow(); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) + if (col.ColumnName != GeometryColumn) + fdr[col.ColumnName] = dr[col]; + fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); + return fdr; + } + return null; + } + return null; + } + } + } + + /// + /// Returns all features with the view box + /// + /// view box + /// FeatureDataSet to fill data into + public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet fds) + { + var sb = new StringBuilder($"SELECT {GetAttributeColumnNames()}, {GeometryColumn}{GetMakeValidString()} AS {GeometryColumn} " + + $"FROM {QualifiedTable} {BuildTableHints()} WHERE "); + + if (!String.IsNullOrEmpty(DefinitionQuery)) + sb.Append($"{DefinitionQuery} AND "); + + if (!ValidateGeometries || + (SpatialObjectType == SqlServerSpatialObjectType.Geometry && (ForceSeekHint || !string.IsNullOrEmpty(ForceIndex)))) + // Geometry sensitive to invalid geometries, and BuildTableHints (ForceSeekHint, ForceIndex) do not suppport .MakeValid() in GetBoxFilterStr + sb.Append($"{GeometryColumn}.STIsValid() = 1 AND "); + + sb.Append($"{GetBoxFilterStr(bbox)} {GetExtraOptions()}"); + + if (_logger.IsDebugEnabled) _logger.DebugFormat("ExecuteIntersectionQuery {0}", sb.ToString()); + + ExecuteIntersectionQuery(sb.ToString(), fds); + } + + /// + /// Select records from database and return FeatureDataSet with SharpMap geometries + /// + protected override void ExecuteIntersectionQuery(string sql, FeatureDataSet fds) + { + using (var conn = new SqlConnection(ConnectionString)) + { + conn.Open(); + using (var adapter = new SqlDataAdapter(sql, conn)) + { + var ds = new System.Data.DataSet(); + adapter.Fill(ds); + conn.Close(); + if (ds.Tables.Count > 0) + { + var fdt = new FeatureDataTable(ds.Tables[0]); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) + if (col.ColumnName != GeometryColumn) + fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression); + + foreach (System.Data.DataRow dr in ds.Tables[0].Rows) + { + FeatureDataRow fdr = fdt.NewRow(); + foreach (System.Data.DataColumn col in ds.Tables[0].Columns) + if (col.ColumnName != GeometryColumn) + fdr[col.ColumnName] = dr[col]; + + fdr.Geometry = SqlBytesToGeometry(dr[GeometryColumn]); + fdt.AddRow(fdr); + } + fds.Tables.Add(fdt); + } + } + } + } + + private Geometry SqlBytesToGeometry(Object sqlBytes) + { + Geometry geom = null; + if (sqlBytes != null && sqlBytes != DBNull.Value) + if (SpatialObjectType == SqlServerSpatialObjectType.Geometry) + geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)sqlBytes, Factory); + else + geom = SqlGeographyConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeography)sqlBytes, Factory); + return geom; + } + + } +} diff --git a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs index 5a95da8e..ccd94c6b 100644 --- a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs +++ b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialOperationsEx.cs @@ -1,200 +1,205 @@ -#region License - -/* - * The attached / following is part of SharpMap.SqlServerSpatialObjects. - * - * SharpMap.SqlServerSpatialObjects is free software © 2010 Ingenieurgruppe IVV GmbH & Co. KG, - * www.ivv-aachen.de; you can redistribute it and/or modify it under the terms - * of the current GNU Lesser General Public License (LGPL) as published by and - * available from the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA: http://fsf.org/. - * This program is distributed without any warranty; - * without even the implied warranty of merchantability or fitness for purpose. - * See the GNU Lesser General Public License for the full details. - * - * Author: Felix Obermaier 2010 - * - */ - -#endregion - -using System; -using Microsoft.SqlServer.Types; -using SharpMap.Converters.SqlServer2008SpatialObjects; -using SharpMap.Data.Providers; -using Geometry = GeoAPI.Geometries.IGeometry; - -namespace SharpMap.Geometries -{ - /// - /// Class defining a set of named spatial operations for geometric shape objects. - /// - public static class SpatialOperationsEx - { - [Obsolete] - public static Geometry Buffer(Geometry g, Double distance) - { - return Buffer(g, distance, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry Buffer(Geometry g, Double distance, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgBuffer = sg.STBuffer(distance); - return SqlGeometryConverter.ToSharpMapGeometry(sgBuffer); - } - else - { - SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); - SqlGeography sgBuffer = sg.STBuffer(distance); - return SqlGeographyConverter.ToSharpMapGeometry(sgBuffer); - } - } - - [Obsolete] - public static Geometry Union(Geometry g, params Geometry[] geometries) - { - return Union(g, SqlServerSpatialObjectType.Geometry, geometries); - } - - public static Geometry Union(Geometry g, SqlServerSpatialObjectType spatialMode, params Geometry[] geometries) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - foreach (SqlGeometry sgUnion in SqlGeometryConverter.ToSqlGeometries(geometries)) - { - sg = sg.STUnion(sgUnion); - } - return SqlGeometryConverter.ToSharpMapGeometry(sg); - } - else - { - SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); - foreach (SqlGeography sgUnion in SqlGeographyConverter.ToSqlGeographies(geometries)) - { - sg = sg.STUnion(sgUnion); - } - return SqlGeographyConverter.ToSharpMapGeometry(sg); - } - - } - - [Obsolete] - public static Geometry Difference(Geometry g1, Geometry g2) - { - return Difference(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry Difference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgDifference = sg1.STDifference(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgDifference); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - SqlGeography sgDifference = sg1.STDifference(sg2); - return SqlGeographyConverter.ToSharpMapGeometry(sgDifference); - } - } - - [Obsolete] - public static Geometry SymDifference(Geometry g1, Geometry g2) - { - return SymDifference(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry SymDifference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgSymDifference = sg1.STSymDifference(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgSymDifference); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - SqlGeography sgSymDifference = sg1.STSymDifference(sg2); - return SqlGeographyConverter.ToSharpMapGeometry(sgSymDifference); - } - } - - [Obsolete] - public static Geometry Intersection(Geometry g1, Geometry g2) - { - return Intersection(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry Intersection(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - SqlGeometry sgIntersection = sg1.STIntersection(sg2); - return SqlGeometryConverter.ToSharpMapGeometry(sgIntersection); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - SqlGeography sgIntersection = sg1.STIntersection(sg2); - return SqlGeographyConverter.ToSharpMapGeometry(sgIntersection); - } - } - - [Obsolete] - public static Geometry ConvexHull(Geometry g) - { - return ConvexHull(g, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry ConvexHull(Geometry g, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgConvexHull = sg.STConvexHull(); - return SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull); - } - else - { - SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); - SqlGeography sgConvexHull = sg.STConvexHull(); - return SqlGeographyConverter.ToSharpMapGeometry(sgConvexHull); - } - } - - [Obsolete] - public static Geometry Boundary(Geometry g) - { - return Boundary(g, SqlServerSpatialObjectType.Geometry); - } - - public static Geometry Boundary(Geometry g, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); - SqlGeometry sgBoundary = sg.STBoundary(); - return SqlGeometryConverter.ToSharpMapGeometry(sgBoundary); - } - else - { - throw new ArgumentOutOfRangeException ("Geography does not support STBoundary"); - } - } - - } -} +#region License + +/* + * The attached / following is part of SharpMap.SqlServerSpatialObjects. + * + * SharpMap.SqlServerSpatialObjects is free software � 2010 Ingenieurgruppe IVV GmbH & Co. KG, + * www.ivv-aachen.de; you can redistribute it and/or modify it under the terms + * of the current GNU Lesser General Public License (LGPL) as published by and + * available from the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA: http://fsf.org/. + * This program is distributed without any warranty; + * without even the implied warranty of merchantability or fitness for purpose. + * See the GNU Lesser General Public License for the full details. + * + * Author: Felix Obermaier 2010 + * + */ + +#endregion + +using System; +using Microsoft.SqlServer.Types; +using SharpMap.Converters.SqlServer2008SpatialObjects; +using SharpMap.Data.Providers; +using Geometry = GeoAPI.Geometries.IGeometry; + +namespace SharpMap.Geometries +{ + /// + /// Class defining a set of named spatial operations for geometric shape objects. + /// + public static class SpatialOperationsEx + { + static SpatialOperationsEx() + { + SqlServer2008Ex.LoadSqlServerTypes(); + } + + [Obsolete] + public static Geometry Buffer(Geometry g, Double distance) + { + return Buffer(g, distance, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Buffer(Geometry g, Double distance, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgBuffer = sg.STBuffer(distance); + return SqlGeometryConverter.ToSharpMapGeometry(sgBuffer); + } + else + { + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + SqlGeography sgBuffer = sg.STBuffer(distance); + return SqlGeographyConverter.ToSharpMapGeometry(sgBuffer); + } + } + + [Obsolete] + public static Geometry Union(Geometry g, params Geometry[] geometries) + { + return Union(g, SqlServerSpatialObjectType.Geometry, geometries); + } + + public static Geometry Union(Geometry g, SqlServerSpatialObjectType spatialMode, params Geometry[] geometries) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + foreach (SqlGeometry sgUnion in SqlGeometryConverter.ToSqlGeometries(geometries)) + { + sg = sg.STUnion(sgUnion); + } + return SqlGeometryConverter.ToSharpMapGeometry(sg); + } + else + { + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + foreach (SqlGeography sgUnion in SqlGeographyConverter.ToSqlGeographies(geometries)) + { + sg = sg.STUnion(sgUnion); + } + return SqlGeographyConverter.ToSharpMapGeometry(sg); + } + + } + + [Obsolete] + public static Geometry Difference(Geometry g1, Geometry g2) + { + return Difference(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Difference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgDifference = sg1.STDifference(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgDifference); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgDifference = sg1.STDifference(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgDifference); + } + } + + [Obsolete] + public static Geometry SymDifference(Geometry g1, Geometry g2) + { + return SymDifference(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry SymDifference(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgSymDifference = sg1.STSymDifference(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgSymDifference); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgSymDifference = sg1.STSymDifference(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgSymDifference); + } + } + + [Obsolete] + public static Geometry Intersection(Geometry g1, Geometry g2) + { + return Intersection(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Intersection(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + SqlGeometry sgIntersection = sg1.STIntersection(sg2); + return SqlGeometryConverter.ToSharpMapGeometry(sgIntersection); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + SqlGeography sgIntersection = sg1.STIntersection(sg2); + return SqlGeographyConverter.ToSharpMapGeometry(sgIntersection); + } + } + + [Obsolete] + public static Geometry ConvexHull(Geometry g) + { + return ConvexHull(g, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry ConvexHull(Geometry g, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgConvexHull = sg.STConvexHull(); + return SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull); + } + else + { + SqlGeography sg = SqlGeographyConverter.ToSqlGeography(g); + SqlGeography sgConvexHull = sg.STConvexHull(); + return SqlGeographyConverter.ToSharpMapGeometry(sgConvexHull); + } + } + + [Obsolete] + public static Geometry Boundary(Geometry g) + { + return Boundary(g, SqlServerSpatialObjectType.Geometry); + } + + public static Geometry Boundary(Geometry g, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g); + SqlGeometry sgBoundary = sg.STBoundary(); + return SqlGeometryConverter.ToSharpMapGeometry(sgBoundary); + } + else + { + throw new ArgumentOutOfRangeException ("Geography does not support STBoundary"); + } + } + + } +} diff --git a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs index d0bce709..ae61bb9c 100644 --- a/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs +++ b/SharpMap.SqlServerSpatialObjects/Geometries/SpatialRelationsEx.cs @@ -1,348 +1,353 @@ -// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) -// Copyright 2010 - Felix Obermaier -// -// This file is part of SharpMap. -// SharpMap is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// SharpMap is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. - -// You should have received a copy of the GNU Lesser General Public License -// along with SharpMap; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -using System; -using Microsoft.SqlServer.Types; -using SharpMap.Converters.SqlServer2008SpatialObjects; -using SharpMap.Data.Providers; -using Geometry = GeoAPI.Geometries.IGeometry; - -namespace SharpMap.Geometries -{ - /// - /// Class defining a set of named spatial relationship operators for geometric shape objects. - /// - public static class SpatialRelationsEx - { - /// - /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as - /// reversing the primary and comparison shapes of the Within operation. - /// - /// Source geometry - /// Other geometry - /// True if otherGeometry is wholly contained within the source geometry. - [Obsolete] - public static bool Contains(Geometry g1, Geometry g2) - { - return Contains(g1, g2, Data.Providers.SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as - /// reversing the primary and comparison shapes of the Within operation. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// True if otherGeometry is wholly contained within the source geometry. - public static bool Contains(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)(sg1.STContains(sg2)); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)(sg1.STContains(sg2)); - } - } - - /// - /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than - /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. - /// geometry. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Crosses(Geometry g1, Geometry g2) - { - return Crosses(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than - /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. - /// geometry. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Crosses(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STCrosses(sg2); - } - else - { - throw new ArgumentOutOfRangeException ("Geography does not support STCrosses. You must first convert Geography to Geometry using WKB"); - } - } - - /// - /// Returns true if otherGeometry is disjoint from the source geometry. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Disjoint(Geometry g1, Geometry g2) - { - return Disjoint(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if otherGeometry is disjoint from the source geometry. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Disjoint(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - return !g2.Intersects(g1); - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)sg1.STDisjoint(sg2); - } - } - - /// - /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. - /// - /// Source geometry - /// Other Geometry - /// - [Obsolete] - public static bool Equals(Geometry g1, Geometry g2) - { - return Equals(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. - /// - /// Source geometry - /// Other Geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Equals(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STEquals(sg2); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)sg1.STEquals(sg2); - } - } - - /// - /// Returns true if there is any intersection between the two geometries. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Intersects(Geometry g1, Geometry g2) - { - return Intersects(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if there is any intersection between the two geometries. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Intersects(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STIntersects(sg2); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)sg1.STIntersects(sg2); - } - } - - /// - /// Returns true if the intersection of the two geometries results in an object of the same dimension as the - /// input geometries and the intersection geometry is not equal to either geometry. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Overlaps(Geometry g1, Geometry g2) - { - return Overlaps(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if the intersection of the two geometries results in an object of the same dimension as the - /// input geometries and the intersection geometry is not equal to either geometry. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Overlaps(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STOverlaps(sg2); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)sg1.STOverlaps(sg2); - } - } - - /// - /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Touches(Geometry g1, Geometry g2) - { - return Touches(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Touches(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STTouches(sg2); - } - else - { - throw new ArgumentOutOfRangeException("Geography does not support STTouches. You must first convert Geography to Geometry using WKB"); - } - } - - /// - /// Returns true if the primary geometry is wholly contained within the comparison geometry. - /// - /// Source geometry - /// Other geometry - /// - [Obsolete] - public static bool Within(Geometry g1, Geometry g2) - { - return Within(g1, g2, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if the primary geometry is wholly contained within the comparison geometry. - /// - /// Source geometry - /// Other geometry - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static bool Within(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STWithin(sg2); - } - else - { - SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); - SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); - return (bool)sg1.STWithin(sg2); - } - - } - - /// - /// Returns true if the given geometries relate according to the provided intersection pattern Matrix - /// - /// Source geometry - /// Other geometry - /// Intersection pattern Matrix - /// - [Obsolete] - public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix) - { - return Relate(g1, g2, intersectionPatternMatrix, SqlServerSpatialObjectType.Geometry); - } - - /// - /// Returns true if the given geometries relate according to the provided intersection pattern Matrix - /// - /// Source geometry - /// Other geometry - /// Intersection pattern Matrix - /// calculation library - some methods have different behaviour depending on geometry or geography - /// - public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix, SqlServerSpatialObjectType spatialMode) - { - if (spatialMode == SqlServerSpatialObjectType.Geometry) - { - SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); - SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); - return (bool)sg1.STRelate(sg2, intersectionPatternMatrix); - } - else - { - throw new ArgumentOutOfRangeException("Geography does not support STRelate. You must first convert Geography to Geometry using WKB"); - } - } - } -} +// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) +// Copyright 2010 - Felix Obermaier +// +// This file is part of SharpMap. +// SharpMap is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SharpMap is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with SharpMap; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +using System; +using Microsoft.SqlServer.Types; +using SharpMap.Converters.SqlServer2008SpatialObjects; +using SharpMap.Data.Providers; +using Geometry = GeoAPI.Geometries.IGeometry; + +namespace SharpMap.Geometries +{ + /// + /// Class defining a set of named spatial relationship operators for geometric shape objects. + /// + public static class SpatialRelationsEx + { + static SpatialRelationsEx() + { + SqlServer2008Ex.LoadSqlServerTypes(); + } + + /// + /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as + /// reversing the primary and comparison shapes of the Within operation. + /// + /// Source geometry + /// Other geometry + /// True if otherGeometry is wholly contained within the source geometry. + [Obsolete] + public static bool Contains(Geometry g1, Geometry g2) + { + return Contains(g1, g2, Data.Providers.SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as + /// reversing the primary and comparison shapes of the Within operation. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// True if otherGeometry is wholly contained within the source geometry. + public static bool Contains(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)(sg1.STContains(sg2)); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)(sg1.STContains(sg2)); + } + } + + /// + /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than + /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. + /// geometry. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Crosses(Geometry g1, Geometry g2) + { + return Crosses(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than + /// the maximum dimension of the two geometries and the intersection geometry is not equal to either. + /// geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Crosses(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == Data.Providers.SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STCrosses(sg2); + } + else + { + throw new ArgumentOutOfRangeException ("Geography does not support STCrosses. You must first convert Geography to Geometry using WKB"); + } + } + + /// + /// Returns true if otherGeometry is disjoint from the source geometry. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Disjoint(Geometry g1, Geometry g2) + { + return Disjoint(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if otherGeometry is disjoint from the source geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Disjoint(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + return !g2.Intersects(g1); + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STDisjoint(sg2); + } + } + + /// + /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. + /// + /// Source geometry + /// Other Geometry + /// + [Obsolete] + public static bool Equals(Geometry g1, Geometry g2) + { + return Equals(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry. + /// + /// Source geometry + /// Other Geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Equals(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STEquals(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STEquals(sg2); + } + } + + /// + /// Returns true if there is any intersection between the two geometries. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Intersects(Geometry g1, Geometry g2) + { + return Intersects(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if there is any intersection between the two geometries. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Intersects(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STIntersects(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STIntersects(sg2); + } + } + + /// + /// Returns true if the intersection of the two geometries results in an object of the same dimension as the + /// input geometries and the intersection geometry is not equal to either geometry. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Overlaps(Geometry g1, Geometry g2) + { + return Overlaps(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the intersection of the two geometries results in an object of the same dimension as the + /// input geometries and the intersection geometry is not equal to either geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Overlaps(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STOverlaps(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STOverlaps(sg2); + } + } + + /// + /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Touches(Geometry g1, Geometry g2) + { + return Touches(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the only points in common between the two geometries lie in the union of their boundaries. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Touches(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STTouches(sg2); + } + else + { + throw new ArgumentOutOfRangeException("Geography does not support STTouches. You must first convert Geography to Geometry using WKB"); + } + } + + /// + /// Returns true if the primary geometry is wholly contained within the comparison geometry. + /// + /// Source geometry + /// Other geometry + /// + [Obsolete] + public static bool Within(Geometry g1, Geometry g2) + { + return Within(g1, g2, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the primary geometry is wholly contained within the comparison geometry. + /// + /// Source geometry + /// Other geometry + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static bool Within(Geometry g1, Geometry g2, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STWithin(sg2); + } + else + { + SqlGeography sg1 = SqlGeographyConverter.ToSqlGeography(g1); + SqlGeography sg2 = SqlGeographyConverter.ToSqlGeography(g2); + return (bool)sg1.STWithin(sg2); + } + + } + + /// + /// Returns true if the given geometries relate according to the provided intersection pattern Matrix + /// + /// Source geometry + /// Other geometry + /// Intersection pattern Matrix + /// + [Obsolete] + public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix) + { + return Relate(g1, g2, intersectionPatternMatrix, SqlServerSpatialObjectType.Geometry); + } + + /// + /// Returns true if the given geometries relate according to the provided intersection pattern Matrix + /// + /// Source geometry + /// Other geometry + /// Intersection pattern Matrix + /// calculation library - some methods have different behaviour depending on geometry or geography + /// + public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix, SqlServerSpatialObjectType spatialMode) + { + if (spatialMode == SqlServerSpatialObjectType.Geometry) + { + SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1); + SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2); + return (bool)sg1.STRelate(sg2, intersectionPatternMatrix); + } + else + { + throw new ArgumentOutOfRangeException("Geography does not support STRelate. You must first convert Geography to Geometry using WKB"); + } + } + } +} diff --git a/SharpMap.SqlServerSpatialObjects/ReadMe.txt b/SharpMap.SqlServerSpatialObjects/ReadMe.txt index eef58259..d8f09409 100644 --- a/SharpMap.SqlServerSpatialObjects/ReadMe.txt +++ b/SharpMap.SqlServerSpatialObjects/ReadMe.txt @@ -1,35 +1,60 @@ -In order to use this project you need to add a reference to the -"Microsoft SQL Server System CLR Types". - -If you have SqlServer2008 (Express) installed on your machine you'll probably find in somewhere -in the installation path of it. On my machine the path is: -C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll - -If you do not have SqlServer 2008 on your machine, all you need is download some files -from the "Microsoft SQL Server 2008 Feature Pack, October 2008": -http://www.microsoft.com/downloads/en/details.aspx?FamilyId=228DE03F-3B5A-428A-923F-58A033D316E1&displaylang=en - -Look for "Microsoft SQL Server System CLR Types" - -Enjoy -FObermaier - -================================================================================================================================= - -Update Nov 2018: Added support for SqlGeography - SqlServer2008Ex.cs - SqlGeographyConverter.cs (new class) - SpatialOperationsEx.cs (basic support for Geography) - SpatialRelationsEx.cs (basic support for Geography) - -Several more recents approaches were also considered, but would have caused breaking changes: -1) Drop reference to Microsoft.SqlServer.Types and replace with NuGet Microsoft.SqlServerTypes v14.0.1016.290 - This package support x86 and x64, and also includes SqlServerSpatialxxx.dll (no need to install any other Sql Server binaries). - Also requires binding redirects, and native SQL assemblies must be explicitly loaded at runtime by client (breaking change) -2) Use NuGet NetTopologySuite.Io.SqlServerBytes (released Oct 2018) instead of SqlGeometryConverter.cs - This package provides comprehenisve conversion between NTS geometry and SQL Server geometery/geography types, but targets NetStandard 2.0. - Also, SqlGeometryConverter.cs implements custom exception handling. - -Regards - -Tim +Update Sep 2019: Resolve SqlServer dependencies and loading native types + +1) SqlServer dependencies (x32 and x64) now defined by NuGet package Microsoft.SqlServer.Types + This includes: + Microsoft.SqlServer.Types.dll + msvcr120.dll (x32/x64) + SqlServerSpatial140.dll (x32/x64) +2) Loading x32 or x64 native types at runtime now handled internally by static constructors +3) Your project should only reference SharpMap.SqlServerSpatialObjects: + a) Your project does NOT need NuGet package Microsoft.SqlServer.Types + b) Your project does NOT need to explicitly load SqlServer types at runtime + c) Your project most likely requires a BINDING REDIRECT (see WinformSamples app.config) + + + + + + + + + d) If you remove NuGet package Microsoft.SqlServer.Types from your project, you will probably need manually delete + sub-folder "SqlServerTypes". Otherwise, SqlServer dependencies may not be copied across during build. + +================================================================================================================================= + +In order to use this project you need to add a reference to the +"Microsoft SQL Server System CLR Types". + +If you have SqlServer2008 (Express) installed on your machine you'll probably find in somewhere +in the installation path of it. On my machine the path is: +C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll + +If you do not have SqlServer 2008 on your machine, all you need is download some files +from the "Microsoft SQL Server 2008 Feature Pack, October 2008": +http://www.microsoft.com/downloads/en/details.aspx?FamilyId=228DE03F-3B5A-428A-923F-58A033D316E1&displaylang=en + +Look for "Microsoft SQL Server System CLR Types" + +Enjoy +FObermaier + +================================================================================================================================= + +Update Nov 2018: Added support for SqlGeography + SqlServer2008Ex.cs + SqlGeographyConverter.cs (new class) + SpatialOperationsEx.cs (basic support for Geography) + SpatialRelationsEx.cs (basic support for Geography) + +Several more recents approaches were also considered, but would have caused breaking changes: +1) Drop reference to Microsoft.SqlServer.Types and replace with NuGet Microsoft.SqlServerTypes v14.0.1016.290 + This package support x86 and x64, and also includes SqlServerSpatialxxx.dll (no need to install any other Sql Server binaries). + Also requires binding redirects, and native SQL assemblies must be explicitly loaded at runtime by client (breaking change) +2) Use NuGet NetTopologySuite.Io.SqlServerBytes (released Oct 2018) instead of SqlGeometryConverter.cs + This package provides comprehensive conversion between NTS geometry and SQL Server geometery/geography types, but targets NetStandard 2.0. + Also, SqlGeometryConverter.cs implements custom exception handling. + +Regards + +Tim diff --git a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj index 4a128028..975a67ab 100644 --- a/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj +++ b/SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj @@ -1,101 +1,114 @@ - - - - Debug - AnyCPU - {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} - Library - Properties - SharpMap - SharpMap.SqlServerSpatialObjects - 512 - v4.0 - Client - ..\ - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AnyCPU - bin\Debug\SharpMap.SqlServerSpatialObjects.XML - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AnyCPU - bin\Release\SharpMap.SqlServerSpatialObjects.XML - false - - - - ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - - ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll - - - ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - False - C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll - - - ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - - - - - - - - - - - - - Properties\SharedAssemblyVersion.cs - - - - - - - - - Designer - - - - - - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - - - \ No newline at end of file + + + + Debug + AnyCPU + {6D681045-8EF1-44EA-A19D-C7A63A6D0F76} + Library + Properties + SharpMap + SharpMap.SqlServerSpatialObjects + 512 + v4.0 + Client + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AnyCPU + bin\Debug\SharpMap.SqlServerSpatialObjects.XML + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AnyCPU + bin\Release\SharpMap.SqlServerSpatialObjects.XML + false + + + + ..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll + + + ..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll + + + ..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll + + + ..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + + + + + + + + + + + + + Properties\SharedAssemblyVersion.cs + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + Designer + + + + + + + {C83777FC-AABB-47D9-911F-D76255D4D541} + SharpMap + + + diff --git a/SharpMap.SqlServerSpatialObjects/packages.config b/SharpMap.SqlServerSpatialObjects/packages.config index 9c979eb9..5684aee3 100644 --- a/SharpMap.SqlServerSpatialObjects/packages.config +++ b/SharpMap.SqlServerSpatialObjects/packages.config @@ -1,11 +1,12 @@ - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file From ecf58dc8e30034f22d4ae1846f086ec0162ec9f9 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 8 Sep 2019 22:14:25 +0700 Subject: [PATCH 105/186] Drop SqlServer type references and explicit loading from WinformSamples --- .../Samples/FormSqlServerOpts.cs | 4 +- Examples/WinFormSamples/WinFormSamples.csproj | 1241 ++++++++--------- Examples/WinFormSamples/packages.config | 37 +- 3 files changed, 632 insertions(+), 650 deletions(-) diff --git a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs index a8c4e6dc..574f4f8d 100644 --- a/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs +++ b/Examples/WinFormSamples/Samples/FormSqlServerOpts.cs @@ -25,8 +25,8 @@ public FormSqlServerOpts() protected override void OnLoad(EventArgs e) { - // required for NuGet package Microsoft.SqlServer.Types - SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); + // NO LONGER REQUIRED (performed internally by SharpMap.SqlServerSpatialObjects) + //SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); SqlServerSample.InitialiseTables(ConnectionString); diff --git a/Examples/WinFormSamples/WinFormSamples.csproj b/Examples/WinFormSamples/WinFormSamples.csproj index f9bab267..26ca7723 100644 --- a/Examples/WinFormSamples/WinFormSamples.csproj +++ b/Examples/WinFormSamples/WinFormSamples.csproj @@ -1,630 +1,613 @@ - - - - Debug - AnyCPU - {F81C1843-3B2A-4D72-81AA-A658DB11FA85} - WinExe - Properties - WinFormSamples - WinFormSamples - 512 - true - - - 3.5 - - v4.5 - - ..\..\ - - - http://localhost/WinFormSamples/ - true - Web - true - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - true - full - false - bin\Debug\ - TRACE;DEBUG - prompt - 4 - AnyCPU - false - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - x86 - false - - - - ..\..\packages\BruTile.2.0.1\lib\net45\BruTile.dll - - - ..\..\packages\BruTile.Desktop.2.0.1\lib\net45\BruTile.Desktop.dll - - - ..\..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll - - - ..\..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll - - - ..\..\packages\Common.Logging.Log4Net207.3.4.1\lib\net40\Common.Logging.Log4Net207.dll - - - ..\..\packages\GDAL.1.11.1\lib\net40\gdalconst_csharp.dll - True - - - ..\..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll - True - - - ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll - - - ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll - - - ..\..\packages\log4net.2.0.7\lib\net40-full\log4net.dll - - - ..\..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll - - - ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll - - - ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll - - - ..\..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll - True - - - ..\..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll - True - - - ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll - - - - - - ..\..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll - - - - - - - - - - - Form - - - DlgSamplesMenu.cs - - - Form - - - Form - - - Form - - - FormAnimation.cs - - - Form - - - FormCreateTilesSample.cs - - - Form - - - FormDemoDrawGeometries.cs - - - Form - - - FormMapBox.cs - - - Form - - - FormMovingObjectOverTileLayer.cs - - - - - - Form - - - FormSqlServerOpts.cs - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - FormSqlServerOpts.cs - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Designer - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - - - - DlgSamplesMenu.cs - - - DockAreaForm.cs - - - Form2.cs - - - FormAnimation.cs - - - FormCreateTilesSample.cs - - - FormDemoDrawGeometries.cs - - - FormMapBox.cs - - - FormMovingObjectOverTileLayer.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Designer - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - DockAreaForm.cs - - - Form2.cs - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - {a019b82e-3766-44a3-907a-0487ff9eba49} - SharpMap.CoordinateSystems.DotSpatial - - - {d84f31ed-3d81-42f2-9190-3d021d6038a0} - SharpMap.Layers.BruTile - - - {47F790C2-6DC0-4A09-9026-FC81A09FD6A3} - SharpMap.Layers.HeatLayer - - - {6d681045-8ef1-44ea-a19d-c7a63a6d0f76} - SharpMap.SqlServerSpatialObjects - - - {C83777FC-AABB-47D9-911F-D76255D4D541} - SharpMap - - - {A4140C12-53F5-438C-8D24-9E48C504FECF} - SharpMap.Extensions - - - {DD1CC1DB-4BF9-4C88-A100-733D84795F3A} - SharpMap.UI - - - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - - - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - - - - - - - - + + + + Debug + AnyCPU + {F81C1843-3B2A-4D72-81AA-A658DB11FA85} + WinExe + Properties + WinFormSamples + WinFormSamples + 512 + true + + + 3.5 + + v4.5 + + ..\..\ + + + http://localhost/WinFormSamples/ + true + Web + true + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + bin\Debug\ + TRACE;DEBUG + prompt + 4 + AnyCPU + false + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + false + + + + ..\..\packages\BruTile.2.0.1\lib\net45\BruTile.dll + + + ..\..\packages\BruTile.Desktop.2.0.1\lib\net45\BruTile.Desktop.dll + + + ..\..\packages\Common.Logging.3.4.1\lib\net40\Common.Logging.dll + + + ..\..\packages\Common.Logging.Core.3.4.1\lib\net40\Common.Logging.Core.dll + + + ..\..\packages\Common.Logging.Log4Net207.3.4.1\lib\net40\Common.Logging.Log4Net207.dll + + + ..\..\packages\GDAL.1.11.1\lib\net40\gdalconst_csharp.dll + True + + + ..\..\packages\GDAL.1.11.1\lib\net40\gdal_csharp.dll + True + + + ..\..\packages\GeoAPI.Core.1.7.5\lib\net40-client\GeoAPI.dll + + + ..\..\packages\GeoAPI.CoordinateSystems.1.7.5\lib\net40-client\GeoAPI.CoordinateSystems.dll + + + ..\..\packages\log4net.2.0.7\lib\net40-full\log4net.dll + + + ..\..\packages\NetTopologySuite.Core.1.15.1\lib\net40-client\NetTopologySuite.dll + + + ..\..\packages\NetTopologySuite.CoordinateSystems.1.15.1\lib\net40-client\NetTopologySuite.CoordinateSystems.dll + + + ..\..\packages\GDAL.1.11.1\lib\net40\ogr_csharp.dll + True + + + ..\..\packages\GDAL.1.11.1\lib\net40\osr_csharp.dll + True + + + ..\..\packages\ProjNET4GeoAPI.1.4.1\lib\net40-client\ProjNET.dll + + + + + + ..\..\packages\System.Data.SQLite.Core.1.0.109.1\lib\net40\System.Data.SQLite.dll + + + + + + + + + + + Form + + + DlgSamplesMenu.cs + + + Form + + + Form + + + Form + + + FormAnimation.cs + + + Form + + + FormCreateTilesSample.cs + + + Form + + + FormDemoDrawGeometries.cs + + + Form + + + FormMapBox.cs + + + Form + + + FormMovingObjectOverTileLayer.cs + + + + + + Form + + + FormSqlServerOpts.cs + + + + + + + + + + + + + FormSqlServerOpts.cs + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Designer + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + DlgSamplesMenu.cs + + + DockAreaForm.cs + + + Form2.cs + + + FormAnimation.cs + + + FormCreateTilesSample.cs + + + FormDemoDrawGeometries.cs + + + FormMapBox.cs + + + FormMovingObjectOverTileLayer.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Designer + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + DockAreaForm.cs + + + Form2.cs + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + {a019b82e-3766-44a3-907a-0487ff9eba49} + SharpMap.CoordinateSystems.DotSpatial + + + {d84f31ed-3d81-42f2-9190-3d021d6038a0} + SharpMap.Layers.BruTile + + + {47F790C2-6DC0-4A09-9026-FC81A09FD6A3} + SharpMap.Layers.HeatLayer + + + {6d681045-8ef1-44ea-a19d-c7a63a6d0f76} + SharpMap.SqlServerSpatialObjects + + + {C83777FC-AABB-47D9-911F-D76255D4D541} + SharpMap + + + {A4140C12-53F5-438C-8D24-9E48C504FECF} + SharpMap.Extensions + + + {DD1CC1DB-4BF9-4C88-A100-733D84795F3A} + SharpMap.UI + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Aktivieren Sie die Wiederherstellung von NuGet-Paketen, um die fehlende Datei herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + + + + + + + + \ No newline at end of file diff --git a/Examples/WinFormSamples/packages.config b/Examples/WinFormSamples/packages.config index 8310b003..65393748 100644 --- a/Examples/WinFormSamples/packages.config +++ b/Examples/WinFormSamples/packages.config @@ -1,20 +1,19 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file From d1533a562fdbd04d3d05e5f482416fecfeeec836 Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 8 Sep 2019 22:21:56 +0700 Subject: [PATCH 106/186] Add SqlServerTypes project files to .gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 076c0fb8..84ff0421 100644 --- a/.gitignore +++ b/.gitignore @@ -202,4 +202,7 @@ I[V|v][V|v]*/ I[V|v][V|v]*.* *I[V|v][V|v]/ *I[V|v][V|v].* -/SharpMap/SharpMap.png + +# Microsoft.SqlServer.Types NuGet files +**/SqlServerTypes/Loader.cs +**/SqlServerTypes/readme.htm From bee4fbfb230c13039773e5f7f217ce092995b64f Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 8 Sep 2019 22:34:34 +0700 Subject: [PATCH 107/186] Update SqlServer dependencies for UnitTests via package --- UnitTests/UnitTests.csproj | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 7a85af0d..88a65ddc 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -60,13 +60,10 @@ --> - - - False - C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll - + + ..\packages\Microsoft.SqlServer.Types.14.0.1016.290\lib\net40\Microsoft.SqlServer.Types.dll + - ..\packages\BruTile.0.18.1\lib\net40\BruTile.dll From 66f5d1fd73f4e1ee184a0f06c64a78ba7139415a Mon Sep 17 00:00:00 2001 From: Tim C Date: Sun, 8 Sep 2019 23:02:18 +0700 Subject: [PATCH 108/186] Update msg box text for SqlServer example in WinformSamples --- Examples/WinFormSamples/FormMapBox.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Examples/WinFormSamples/FormMapBox.cs b/Examples/WinFormSamples/FormMapBox.cs index a73f0d05..593d2a30 100644 --- a/Examples/WinFormSamples/FormMapBox.cs +++ b/Examples/WinFormSamples/FormMapBox.cs @@ -274,11 +274,8 @@ private void radioButton_Click(object sender, EventArgs e) { mapBox1.Refresh(); - MessageBox.Show("Requires SqlServer connection string to be defined (Project / Settings)\n\n" + - "Also, if project folder SqlServerTypes\\x64 and \\x86 are empty, then force reinstall of NuGet package:\n\n" + - "PM> Update-Package Microsoft.SqlServer.Types -ProjectName Examples\\WinFormSamples -reinstall -ignoreDependencies","Sql Server", - MessageBoxButtons.OK,MessageBoxIcon.Information); - + MessageBox.Show("Requires SqlServer connection string to be defined (Project / Settings)", + "Sql Server", MessageBoxButtons.OK,MessageBoxIcon.Information); return; } // now show SqlServer dialog @@ -320,8 +317,11 @@ private void radioButton_Click(object sender, EventArgs e) { MessageBox.Show(this, ex.Message, "Error"); } - Cursor = Cursors.Default; - mapBox1.Cursor = mic; + finally + { + Cursor = Cursors.Default; + mapBox1.Cursor = mic; + } } private void mapImage_ActiveToolChanged(MapBox.Tools tool) From 7be5171ed7b566d4b36485b05d0ab225722e9b57 Mon Sep 17 00:00:00 2001 From: Felix Obermaier Date: Thu, 14 Nov 2019 14:31:31 +0100 Subject: [PATCH 109/186] Change project files to SDK project files Make necessary changes like - only netstandard2.0 or net472 as target frameworks - remove obsolete files - update packages to recent versions - adjust unit tests --- .gitignore | 3 + .travis.yml | 13 +- BuildTools/NuGet.exe | Bin 3787952 -> 0 bytes Docs/SharpMap-Dependencies.dgml | 322 -------- Docs/SharpMap-Dependencies.png | Bin 47482 -> 0 bytes Examples/DemoWinForm/DemoWinForm.csproj | 239 +----- .../DemoWinForm/DemoWinForm.csproj.vspscc | 10 - .../DemoWinForm/Properties/AssemblyInfo.cs | 53 -- Examples/DemoWinForm/app.config | 16 - Examples/DemoWinForm/packages.config | 10 - .../ExampleCodeSnippets.csproj | 198 +---- .../ExampleCodeSnippets.csproj.vspscc | 10 - Examples/ExampleCodeSnippets/NtsTests.cs | 9 +- .../Properties/AssemblyInfo.cs | 39 - .../TrueIntersectionTestingWithNTS.cs | 117 --- Examples/ExampleCodeSnippets/app.config | 24 - Examples/ExampleCodeSnippets/packages.config | 17 - .../CustomThemeExample.vb | 28 +- .../ExampleCodeSnipplets.VB.vbproj | 175 +---- .../My Project/Application.Designer.vb | 8 +- .../My Project/AssemblyInfo.vb | 35 - .../My Project/Resources.Designer.vb | 47 +- .../My Project/Settings.Designer.vb | 60 +- Examples/ExampleCodeSnipplets.VB/app.config | 16 +- .../ExampleCodeSnipplets.VB/packages.config | 9 - .../SharpMap.Demo.Wms.csproj | 43 +- .../SharpMap.Demo.Wms.csproj.vspscc | 10 - Examples/SharpMap.Demo.Wms/Web.config | 14 +- Examples/SharpMap.Demo.Wms/packages.config | 25 +- Examples/WPFSamples/MainWindow.xaml | 2 +- Examples/WPFSamples/MainWindow.xaml.cs | 6 +- .../WPFSamples/Properties/AssemblyInfo.cs | 55 -- .../Properties/AssemblyInfoSupplement.cs | 7 + .../Properties/Resources.Designer.cs | 4 +- .../Properties/Settings.Designer.cs | 4 +- Examples/WPFSamples/WPFSamples.csproj | 178 ++--- Examples/WPFSamples/app.config | 20 - Examples/WPFSamples/packages.config | 8 - Examples/WinFormSamples/Form1.Designer.cs | 403 ---------- Examples/WinFormSamples/Form1.cs | 182 ----- Examples/WinFormSamples/Form1.resx | 120 --- Examples/WinFormSamples/GdalConfiguration.vb | 159 ---- .../WinFormSamples/Properties/AssemblyInfo.cs | 39 - Examples/WinFormSamples/WinFormSamples.csproj | 660 ++--------------- .../WinFormSamples.csproj.vspscc | 10 - Examples/WinFormSamples/app.config | 39 - Examples/WinFormSamples/packages.config | 19 - SharpMap.Common.props | 13 +- .../Properties/AssemblyInfo.cs | 23 - .../SharpMap.Converters.GeoJSON.csproj | 101 +-- SharpMap.Converters.GeoJSON/app.config | 11 - SharpMap.Converters.GeoJSON/packages.config | 7 - .../Properties/AssemblyInfo.cs | 24 - .../SharpMap.Converters.Spatialite.csproj | 85 +-- .../packages.config | 6 - SharpMap.Converters.nuspec | 35 - SharpMap.CoordinateSystems.DotSpatial.nuspec | 33 - .../Properties/AssemblyInfo.cs | 22 - ...arpMap.CoordinateSystems.DotSpatial.csproj | 93 +-- .../packages.config | 7 - SharpMap.CoordinateSystems.ProjNet.nuspec | 31 - SharpMap.Core.nuspec | 42 -- SharpMap.Data.Providers.FileGdb/App.config | 12 - .../Properties/AssemblyInfo.cs | 24 - .../SharpMap.Data.Providers.FileGdb.csproj | 173 +---- .../packages.config | 10 - SharpMap.Data.Providers.GeoPackage.nuspec | 29 - .../SharpMap.Data.Providers.GeoPackage.csproj | 8 +- .../Tiles/GpkgTileSchema.cs | 6 +- SharpMap.Data.Providers.GeoPackage/app.config | 19 - .../packages.config | 12 - SharpMap.Data.Providers.Kml.nuspec | 32 - .../Properties/AssemblyInfo.cs | 23 - .../SharpMap.Data.Providers.Kml.csproj | 123 +--- SharpMap.Data.Providers.Kml/app.config | 23 - SharpMap.Data.Providers.Kml/packages.config | 13 - SharpMap.Data.Providers.OracleSpatial.nuspec | 26 - .../Properties/AssemblyInfo.cs | 36 - ...arpMap.Data.Providers.OracleSpatial.csproj | 143 +--- ...arpMap.Data.Providers.OracleSpatial.nuspec | 23 - .../app.config | 15 - .../packages.config | 11 - SharpMap.Extensions.nuspec | 36 - .../Properties/AssemblyInfo.cs | 26 - .../SharpMap.Extensions.x86.csproj | 111 --- SharpMap.Extensions.x86/app.config | 27 - SharpMap.Extensions.x86/packages.config | 12 - .../Data/Providers/NtsProvider.cs | 8 +- .../Data/Providers/OgrProvider.cs | 9 +- .../Data/Providers/SpatiaLite.cs | 80 +- SharpMap.Extensions/GdalConfiguration.cs | 149 +++- SharpMap.Extensions/Layers/GdalRasterLayer.cs | 18 +- .../Layers/GdalTileIndexRasterLayer.cs | 2 - .../SharpMap.Extensions.csproj | 129 ++-- .../SharpMap.Extensions.csproj.vspscc | 10 - SharpMap.Extensions/app.config | 30 +- SharpMap.Extensions/packages.config | 38 +- SharpMap.Layers.BruTile.nuspec | 38 - .../SharpMap.Layers.BruTile.csproj | 17 +- SharpMap.Layers.BruTile/app.config | 15 - SharpMap.Layers.BruTile/packages.config | 11 - SharpMap.Layers.HeatLayer.nuspec | 29 - .../Properties/AssemblyInfo.cs | 24 - .../SharpMap.Layers.HeatLayer.csproj | 35 +- .../SharpMap.Layers.HeatLayer.nuspec | 21 - SharpMap.Layers.HeatLayer/app.config | 19 - SharpMap.Layers.HeatLayer/packages.config | 5 - SharpMap.Logo.png | Bin 0 -> 2650 bytes .../Properties/AssemblyInfo.cs | 23 - .../SharpMap.Serialization.csproj | 118 +-- .../SharpMap.Serialization.csproj.vspscc | 10 - SharpMap.Serialization/app.config | 27 - SharpMap.Serialization/packages.config | 9 - .../SharpMap.SqlServerSpatialObjects.csproj | 22 +- ...pMap.SqlServerSpatialObjects.csproj.vspscc | 10 - SharpMap.SqlServerSpatialObjects/app.config | 16 +- .../packages.config | 14 +- SharpMap.UI.WPF.nuspec | 35 - SharpMap.UI.WPF/Properties/AssemblyInfo.cs | 36 - SharpMap.UI.WPF/SharpMap.UI.WPF.csproj | 118 +-- SharpMap.UI.WPF/app.config | 19 - SharpMap.UI.WPF/packages.config | 6 - SharpMap.UI.nuspec | 31 - .../ImageGenerator/IMapBoxImageGenerator.cs | 1 - SharpMap.UI/Forms/MapImage.cs | 695 ------------------ SharpMap.UI/Properties/AssemblyInfo.cs | 42 -- SharpMap.UI/SharpMap.UI.csproj | 623 +--------------- SharpMap.UI/SharpMap.UI.csproj.vspscc | 10 - SharpMap.UI/app.config | 19 - SharpMap.UI/packages.config | 13 - SharpMap.Utilities.Indexing.SbnTree.nuspec | 30 - ...SharpMap.Utilities.Indexing.SbnTree.csproj | 4 +- SharpMap.Web.nuspec | 33 - SharpMap.Web/Properties/AssemblyInfo.cs | 27 - .../Properties/AssemblyInfoSupplement.cs | 1 + SharpMap.Web/SharpMap.Web.csproj | 123 +--- SharpMap.Web/app.config | 19 - SharpMap.Web/packages.config | 7 - SharpMap.nuspec | 35 - SharpMap.proj | 128 ---- SharpMap.sln | 406 +--------- SharpMap.targets | 2 - SharpMap.vssscc | 10 - SharpMap/Data/Providers/DbPoint.cs | 6 +- SharpMap/Data/Providers/OleDbPoint.cs | 31 +- SharpMap/Drawing/Color.cs | 4 +- SharpMap/SharpMap.csproj | 83 +-- SharpMap/SharpMap.csproj.vspscc | 10 - UnitTests/Data/Providers/OgrProviderTest.cs | 2 +- .../Data/Providers/OleDbPointProviderTest.cs | 397 +++++----- .../Data/Providers/PostGisGeographyTests.cs | 27 +- UnitTests/Data/Providers/PostGisTests.cs | 33 +- UnitTests/Data/Providers/ThreadingTest.cs | 2 + UnitTests/Geometries/BoundingBoxTests.cs | 101 --- UnitTests/Geometries/LinestringTests.cs | 44 -- UnitTests/Geometries/MultiLinestringsTests.cs | 43 -- UnitTests/Geometries/PointTests.cs | 86 --- UnitTests/Geometries/PolygonTests.cs | 53 -- .../Layers/wms.atlantedesertificazione.xml | 2 +- UnitTests/Properties/Settings.Designer.cs | 3 +- .../Decoration/Graticule/GraticuleTest.cs | 2 +- .../Serialization/MapDocSerializationTests.cs | 27 +- UnitTests/Serialization/ProviderTest.cs | 28 +- UnitTests/Serialization/SerializationTests.cs | 8 +- UnitTests/UnitTests.csproj | 464 +++--------- UnitTests/UnitTests.csproj.vspscc | 10 - packages/repositories.config | 29 - 167 files changed, 1422 insertions(+), 8453 deletions(-) delete mode 100644 BuildTools/NuGet.exe delete mode 100644 Docs/SharpMap-Dependencies.dgml delete mode 100644 Docs/SharpMap-Dependencies.png delete mode 100644 Examples/DemoWinForm/DemoWinForm.csproj.vspscc delete mode 100644 Examples/DemoWinForm/Properties/AssemblyInfo.cs delete mode 100644 Examples/DemoWinForm/packages.config delete mode 100644 Examples/ExampleCodeSnippets/ExampleCodeSnippets.csproj.vspscc delete mode 100644 Examples/ExampleCodeSnippets/Properties/AssemblyInfo.cs delete mode 100644 Examples/ExampleCodeSnippets/TrueIntersectionTestingWithNTS.cs delete mode 100644 Examples/ExampleCodeSnippets/packages.config delete mode 100644 Examples/ExampleCodeSnipplets.VB/My Project/AssemblyInfo.vb delete mode 100644 Examples/ExampleCodeSnipplets.VB/packages.config delete mode 100644 Examples/SharpMap.Demo.Wms/SharpMap.Demo.Wms.csproj.vspscc delete mode 100644 Examples/WPFSamples/Properties/AssemblyInfo.cs create mode 100644 Examples/WPFSamples/Properties/AssemblyInfoSupplement.cs delete mode 100644 Examples/WPFSamples/app.config delete mode 100644 Examples/WPFSamples/packages.config delete mode 100644 Examples/WinFormSamples/Form1.Designer.cs delete mode 100644 Examples/WinFormSamples/Form1.cs delete mode 100644 Examples/WinFormSamples/Form1.resx delete mode 100644 Examples/WinFormSamples/GdalConfiguration.vb delete mode 100644 Examples/WinFormSamples/Properties/AssemblyInfo.cs delete mode 100644 Examples/WinFormSamples/WinFormSamples.csproj.vspscc delete mode 100644 Examples/WinFormSamples/packages.config delete mode 100644 SharpMap.Converters.GeoJSON/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Converters.GeoJSON/app.config delete mode 100644 SharpMap.Converters.GeoJSON/packages.config delete mode 100644 SharpMap.Converters.Spatialite/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Converters.Spatialite/packages.config delete mode 100644 SharpMap.Converters.nuspec delete mode 100644 SharpMap.CoordinateSystems.DotSpatial.nuspec delete mode 100644 SharpMap.CoordinateSystems.DotSpatial/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.CoordinateSystems.DotSpatial/packages.config delete mode 100644 SharpMap.CoordinateSystems.ProjNet.nuspec delete mode 100644 SharpMap.Core.nuspec delete mode 100644 SharpMap.Data.Providers.FileGdb/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Data.Providers.FileGdb/packages.config delete mode 100644 SharpMap.Data.Providers.GeoPackage.nuspec delete mode 100644 SharpMap.Data.Providers.GeoPackage/app.config delete mode 100644 SharpMap.Data.Providers.GeoPackage/packages.config delete mode 100644 SharpMap.Data.Providers.Kml.nuspec delete mode 100644 SharpMap.Data.Providers.Kml/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Data.Providers.Kml/app.config delete mode 100644 SharpMap.Data.Providers.Kml/packages.config delete mode 100644 SharpMap.Data.Providers.OracleSpatial.nuspec delete mode 100644 SharpMap.Data.Providers.OracleSpatial/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Data.Providers.OracleSpatial/SharpMap.Data.Providers.OracleSpatial.nuspec delete mode 100644 SharpMap.Data.Providers.OracleSpatial/app.config delete mode 100644 SharpMap.Data.Providers.OracleSpatial/packages.config delete mode 100644 SharpMap.Extensions.nuspec delete mode 100644 SharpMap.Extensions.x86/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Extensions.x86/SharpMap.Extensions.x86.csproj delete mode 100644 SharpMap.Extensions.x86/app.config delete mode 100644 SharpMap.Extensions.x86/packages.config delete mode 100644 SharpMap.Extensions/SharpMap.Extensions.csproj.vspscc delete mode 100644 SharpMap.Layers.BruTile.nuspec delete mode 100644 SharpMap.Layers.BruTile/app.config delete mode 100644 SharpMap.Layers.BruTile/packages.config delete mode 100644 SharpMap.Layers.HeatLayer.nuspec delete mode 100644 SharpMap.Layers.HeatLayer/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Layers.HeatLayer/SharpMap.Layers.HeatLayer.nuspec delete mode 100644 SharpMap.Layers.HeatLayer/app.config delete mode 100644 SharpMap.Layers.HeatLayer/packages.config create mode 100644 SharpMap.Logo.png delete mode 100644 SharpMap.Serialization/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.Serialization/SharpMap.Serialization.csproj.vspscc delete mode 100644 SharpMap.Serialization/app.config delete mode 100644 SharpMap.Serialization/packages.config delete mode 100644 SharpMap.SqlServerSpatialObjects/SharpMap.SqlServerSpatialObjects.csproj.vspscc delete mode 100644 SharpMap.UI.WPF.nuspec delete mode 100644 SharpMap.UI.WPF/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.UI.WPF/app.config delete mode 100644 SharpMap.UI.WPF/packages.config delete mode 100644 SharpMap.UI.nuspec delete mode 100644 SharpMap.UI/Forms/MapImage.cs delete mode 100644 SharpMap.UI/Properties/AssemblyInfo.cs delete mode 100644 SharpMap.UI/SharpMap.UI.csproj.vspscc delete mode 100644 SharpMap.UI/app.config delete mode 100644 SharpMap.UI/packages.config delete mode 100644 SharpMap.Utilities.Indexing.SbnTree.nuspec delete mode 100644 SharpMap.Web.nuspec delete mode 100644 SharpMap.Web/Properties/AssemblyInfo.cs create mode 100644 SharpMap.Web/Properties/AssemblyInfoSupplement.cs delete mode 100644 SharpMap.Web/app.config delete mode 100644 SharpMap.Web/packages.config delete mode 100644 SharpMap.nuspec delete mode 100644 SharpMap.proj delete mode 100644 SharpMap.vssscc delete mode 100644 SharpMap/SharpMap.csproj.vspscc delete mode 100644 UnitTests/Geometries/BoundingBoxTests.cs delete mode 100644 UnitTests/Geometries/LinestringTests.cs delete mode 100644 UnitTests/Geometries/MultiLinestringsTests.cs delete mode 100644 UnitTests/Geometries/PointTests.cs delete mode 100644 UnitTests/Geometries/PolygonTests.cs delete mode 100644 UnitTests/UnitTests.csproj.vspscc delete mode 100644 packages/repositories.config diff --git a/.gitignore b/.gitignore index 84ff0421..b45580a6 100644 --- a/.gitignore +++ b/.gitignore @@ -206,3 +206,6 @@ I[V|v][V|v]*.* # Microsoft.SqlServer.Types NuGet files **/SqlServerTypes/Loader.cs **/SqlServerTypes/readme.htm + +# Testrunner +testrunner/** \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 5728e611..2d62eae0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,16 @@ language: csharp mono: latest -dotnet: 2.1.402 +sudo: false +dotnet: 3.0 +dist: bionic + +before_install: + - sudo apt-get install -y dotnet-runtime-2.2 + install: -- nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner +- nuget install NUnit.Runners -Version 2.7.1 -OutputDirectory testrunner script: - nuget restore SharpMap.sln - dotnet msbuild SharpMap.targets /t:Version /p:UseTools35=false /v:minimal - dotnet msbuild SharpMap.sln /m "/t:Restore;Build" /p:Configuration=ReleaseLinux "/p:Platform=Any CPU" /p:UseTools35=false "/p:FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/" /v:minimal /p:WarningLevel=3 -- cp SharpMap/SpatialRefSys.xml UnitTests/bin/ -- mono testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe --nothread --exclude:RequiresWindows UnitTests/bin/UnitTests.dll +- mono testrunner/NUnit.Runners.2.7.1/tools/nunit-console.exe --nothread --exclude:RequiresWindows UnitTests/bin/ReleaseLinux/net472/UnitTests.dll diff --git a/BuildTools/NuGet.exe b/BuildTools/NuGet.exe deleted file mode 100644 index 9f8781de0db12095b1bf32b209c112a2d85704d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3787952 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

    FHw2-X5#s|1_~A<*NiJE%yx`!>gEw0Ff^$2eOa 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%0Ak+vHhSMj!fup? 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%0A& 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⪼0 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

    {(!)DmKF;tpHeRSfK9{myD?fWZwhWDr?^Vatue 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

    =hkZO)DL@t6zmH76i?wbMqH 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 z zOvlS@B265}r4F>9;!BE14h$Iwnlx()aU z5~Y4+bp(y31w8Y}ERNIJLAfJE_9 zS*?Vm-CYBT+)Y=TjZ|6fG*@l42a=A-Pau7Tqow)_-)VzLYKLzv^)`~NhC-scDP7$P z=^h-m%EvePAYGLRTMkLr{Er(cU9E$(9Y?zQM5JGg`T zsGjDkqplWdG$e{~N8JS}4~L_k5Vk?2ts=cA(q|(5Dv~u=+t*g5L8^tLt!iPUj;cGP zK{z_9vG~3hhpp!0Tj#Z9khGs)f<$GZty+NAemBnAszdnJ(r-peDE|<*g{WjCTQ!2D zZE0&H)Ul9s?i@gRsJRkq3?#~(33abXvqYLtdfaL}0ZGT-zaUXd(pLTOi*B*2segm% zGP4)bK^zyWZ}EMGrD{W6sg+0rMEZwFxgyOMX_ZKuMcOOU*G5Vx>pF=8BYh<$xw5(_ zRp)10)x%XCFC8H1lGnvZj=BO8*(m~5*SL86qg z)juIoTh>->Gwe2Beb`EW>Bjnm zESiM) z)H{%Lj{VF?wz|`#RyXylmMTJtBQ1(lL?L2v;v|q}ozG(p9Eh ztuNB63q!`{Ho`6wX`qoDH4+llD(UJjxjI#@7D8HyBVD~JYzHJAj*lSe9C1|GuaNZE zWsLLy{3Bfx>5#OE`XY@qdi_+DmzC-SZmT6yet+NS_Tgf}vP2pt(oB*18rQB;Lm-X9 zah19c-#IK5h_phamqpqx(gz}aD$*}TvQ-=Sl;R+v&Va>lBtJjBG{iN{AeDi08hxVg z4N0eOSCK9k>1vTii8R?r=-Wcly`WN&UNTa;+G_M{^$Db3ao8$zly=uqEgYet3;T|+uSHU$-K%vVX|wG_>MK{X zh2@B}RHWxb+Ah*Tk$w>=d6Vl#Q;~X#G(w~aB270^LM?-&!@FLje~a{iNXJAvB~r@G zuGwlLH4y0{k@|=<)JTrH9TLTht#Tmgx;Xcrx?k+5hvn)DNIKn~g+zUeL2473K)$lo zJCLX!Hb{LZ%y*012Z@VR4U#s|QlwrYjTC93ksOr=NvGRlBiU*VB<+`f8EKH(35jfW z)aOReQ70kk5mk7MD^(TgjR%6}YIDPEbulE}PwWFp`*gTSe$b6rOa5NW7LqeS|LNcR~DqdQ3C8s-!r>D=@< zB;AU?C~U8=FGc#zNVW=(#kc^6t(xLn_aa*h>nc)Dk@|_=IAIeZ>5xAxS4)IF4T

    _3G`1@3X(`KXFW|kl#MRTMzP&^ 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 z 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